MySQL에서 특정 열에 음수가 입력되지 않도록 양의 정수 제약 조건을 설정하려면 UNSIGNED 속성을 사용해야 합니다. UNSIGNED로 선언된 열에는 음수를 저장할 수 없기 때문에 자연스럽게 양수 값만 허용됩니다.
UNSIGNED 열 생성 문법
기본적인 문법은 다음과 같습니다.
CREATE TABLE 테이블명 ( 컬럼명 INT UNSIGNED );
테이블 생성 예제
개념을 이해하기 위해 실제로 테이블을 생성해 보겠습니다. 아래 쿼리는 양수 값만 저장할 수 있는 'Marks' 열을 가진 테이블을 만듭니다.
mysql> create table OnlyPositiveValue - > ( - > Marks int UNSIGNED - > ); Query OK, 0 rows affected (0.58 sec)
엄격 모드(Strict Mode) 활성화
테이블에 데이터를 삽입하기 전에 세션 SQL 모드를 STRICT_TRANS_TABLES로 설정해야 합니다. 이 모드를 활성화하면 범위를 벗어나는 값이 입력될 때 경고 대신 오류가 발생하여 잘못된 데이터 저장을 확실하게 차단할 수 있습니다.
mysql> SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES'; Query OK, 0 rows affected, 1 warning (0.00 sec)
음수 입력 시 오류 확인
이제 INSERT 명령으로 음수를 추가하려고 하면 다음과 같은 오류 메시지가 표시됩니다.
mysql> insert into OnlyPositiveValue values(-10); ERROR 1264 (22003): Out of range value for column 'Marks' at row 1 mysql> insert into OnlyPositiveValue values(-100); ERROR 1264 (22003): Out of range value for column 'Marks' at row 1
'Out of range value' 오류가 발생하며 음수 입력이 성공적으로 차단되는 것을 확인할 수 있습니다.
양수 삽입 및 결과 확인
이번에는 양수 값을 정상적으로 삽입해 보겠습니다.
mysql> insert into OnlyPositiveValue values(0); Query OK, 1 row affected (0.17 sec) mysql> insert into OnlyPositiveValue values(10); Query OK, 1 row affected (0.14 sec) mysql> insert into OnlyPositiveValue values(100); Query OK, 1 row affected (0.11 sec)
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from OnlyPositiveValue;
다음은 양수 값들이 정상적으로 저장된 출력 결과입니다.
+-------+ | Marks | +-------+ | 0 | | 10 | | 100 | +-------+ 3 rows in set (0.00 sec)
정리
MySQL에서 정수 열에 양수 제약 조건을 적용하는 방법은 간단합니다. 열을 INT UNSIGNED로 선언하고, STRICT_TRANS_TABLES 모드를 활성화하면 음수 입력 시 오류가 발생하여 데이터 무결성이 보장됩니다. 참고로 UNSIGNED INT의 저장 범위는 0부터 4,294,967,295까지이므로, 일반 INT보다 양수 범위를 두 배 더 넓게 활용할 수 있다는 장점도 있습니다.