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

MySQL ENUM 필드에서 NOT NULL이 미치는 영향

MySQL ENUM 타입과 NOT NULL의 관계

MySQL에서 ENUM 데이터 타입은 정해진 값 목록 중 하나만 저장할 수 있는 편리한 자료형입니다. 그런데 이때 NOT NULL 제약 조건을 선언했는지 여부에 따라, 아무 값도 지정하지 않고 레코드를 삽입할 때의 기본 동작이 달라집니다.

  • NOT NULL을 선언하지 않은 경우 → 기본값으로 NULL이 저장됩니다.
  • NOT NULL을 선언한 경우 → ENUM 목록의 첫 번째 값이 기본값으로 저장됩니다.

아래 두 가지 경우를 실제 예제를 통해 확인해 보겠습니다.

CASE 1 — NOT NULL 없이 선언한 경우 (NULL 반환)

먼저 일반적인 ENUM 컬럼을 가진 테이블을 생성합니다.

mysql> create table DemoTable1(isMarried ENUM('YES','NO'));
Query OK, 0 rows affected (0.76 sec)

insert 명령으로 값을 지정하지 않은 레코드를 삽입합니다.

mysql> insert into DemoTable1 values();
Query OK, 1 row affected (0.18 sec)

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable1;

실행 결과는 다음과 같습니다.

+-----------+
| isMarried |
+-----------+
| NULL |
+-----------+
1 row in set (0.00 sec)

NOT NULL 제약이 없기 때문에, 값을 지정하지 않은 레코드에는 NULL이 그대로 저장된 것을 확인할 수 있습니다.

CASE 2 — NOT NULL을 선언한 경우 (첫 번째 값 반환)

이번에는 같은 구조의 테이블에 NOT NULL을 추가하여 생성합니다.

mysql> create table DemoTable2 (isMarried ENUM('YES','NO') NOT NULL);
Query OK, 0 rows affected (0.57 sec)

마찬가지로 값을 지정하지 않고 레코드를 삽입합니다.

mysql> insert into DemoTable2 values();
Query OK, 1 row affected (0.17 sec)

select 문으로 조회해 보겠습니다.

mysql> select *from DemoTable2;

실행 결과는 다음과 같습니다.

+-----------+
| isMarried |
+-----------+
| YES |
+-----------+
1 row in set (0.00 sec)

컬럼이 NOT NULL로 선언되어 있어 NULL을 허용하지 않으므로, MySQL은 ENUM 목록에서 가장 앞에 정의된 값인 'YES'를 기본값으로 자동 저장했습니다.

정리

선언 방식값 미지정 시 저장되는 기본값
ENUM('YES','NO')NULL
ENUM('YES','NO') NOT NULL'YES' (목록의 첫 번째 값)

따라서 ENUM 컬럼을 설계할 때는 NOT NULL 여부가 의도치 않은 기본값 삽입으로 이어질 수 있음을 항상 염두에 두어야 합니다. 특히 NOT NULL을 사용하는 경우, 목록의 첫 번째 값이 실제로 적절한 기본값인지 신중하게 결정하는 것이 좋습니다.