데이터베이스를 설계할 때 특정 열이 반드시 값을 가져야 한다면 NOT NULL 제약 조건으로 정의해야 합니다. NOT NULL로 선언된 열에는 NULL 값이나 빈 값을 삽입할 수 없으며, 이를 위반하면 MySQL은 오류를 반환합니다.
NOT NULL 제약 조건이 있는 테이블 생성
먼저 일부 열을 NOT NULL로 지정하여 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1895
(
Id int NOT NULL,
FirstName varchar(20),
LastName varchar(20) NOT NULL
);
Query OK, 0 rows affected (0.00 sec)위 예제에서 Id와 LastName 열은 NOT NULL로 정의되어 있으므로 반드시 값을 입력해야 하며, FirstName 열은 NULL을 허용합니다.
레코드 삽입 시 NOT NULL 제약 조건 확인
INSERT 명령을 사용하여 테이블에 레코드를 삽입해 보겠습니다.
mysql> insert into DemoTable1895 values(100,'John','Smith'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1895 values(NULL,'Chris','Brown'); ERROR 1048 (23000): Column 'Id' cannot be null mysql> insert into DemoTable1895 values(102,'Carol',NULL); ERROR 1048 (23000): Column 'LastName' cannot be null mysql> insert into DemoTable1895 values(103,NULL,'Miller'); Query OK, 1 row affected (0.00 sec)
실행 결과를 살펴보면 다음과 같은 동작을 확인할 수 있습니다.
- 첫 번째 INSERT: 모든 열에 유효한 값이 있으므로 정상적으로 삽입됩니다.
- 두 번째 INSERT: NOT NULL로 지정된
Id열에 NULL을 넣으려 했기 때문에 'Column Id cannot be null' 오류가 발생합니다. - 세 번째 INSERT: 마찬가지로 NOT NULL인
LastName열에 NULL을 넣어 오류가 발생합니다. - 네 번째 INSERT: NULL을 허용하는
FirstName열에만 NULL이 들어갔으므로 정상적으로 삽입됩니다.
저장된 데이터 조회
SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1895;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----+-----------+----------+ | Id | FirstName | LastName | +-----+-----------+----------+ | 100 | John | Smith | | 103 | NULL | Miller | +-----+-----------+----------+ 2 rows in set (0.00 sec)
정리
NOT NULL 제약 조건은 데이터 무결성을 보장하는 중요한 도구입니다. 필수 입력 항목(예: 사용자 ID, 성 등)에 적용하면 잘못된 데이터가 저장되는 것을 사전에 차단할 수 있습니다. 반면 선택 사항인 열은 기본값(default)을 허용하거나 NULL을 허용하도록 설계하는 것이 좋습니다.