Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 정수 열에 양수만 입력되도록 제약 조건 설정하는 방법

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보다 양수 범위를 두 배 더 넓게 활용할 수 있다는 장점도 있습니다.