MySQL에서 NOT NULL 제약 조건은 해당 컬럼에 반드시 값을 입력해야 함을 의미합니다. NOT NULL 컬럼은 크게 두 가지 상황에서 추가할 수 있습니다. 첫 번째는 테이블을 새로 생성할 때 함께 정의하는 방법이고, 두 번째는 이미 존재하는 테이블에 ALTER 명령으로 추가하는 방법입니다.
Case 1. 테이블 생성 시 NOT NULL 컬럼 추가하기
테이블을 만드는 시점에 특정 컬럼에 NOT NULL 제약 조건을 지정하려면 아래와 같은 문법을 사용합니다.
CREATE TABLE yourTableName
(
yourColumnName1 dataType NOT NULL,
yourColumnName2 dataType
.
.
.
N
);
실제 테이블을 생성하는 쿼리는 다음과 같습니다.
mysql> create table NotNullAtCreationOfTable
-> (
-> Id int not null,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.60 sec)
위 테이블에서 Id 컬럼은 int 타입으로 선언되었으며, NULL 값을 허용하지 않습니다. 따라서 NULL 값을 삽입하려고 하면 에러가 발생합니다.
NULL 값 삽입 시 발생하는 에러
mysql> insert into NotNullAtCreationOfTable values(NULL,'John'); ERROR 1048 (23000): Column 'Id' cannot be null
반대로 NULL이 아닌 정상적인 값을 삽입하면 정상적으로 처리됩니다.
mysql> insert into NotNullAtCreationOfTable values(1,'Carol'); Query OK, 1 row affected (0.13 sec)
SELECT 문으로 테이블의 레코드를 조회해 보겠습니다.
mysql> select *from NotNullAtCreationOfTable;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Name | +----+-------+ | 1 | Carol | +----+-------+ 1 row in set (0.00 sec)
Case 2. 기존 테이블에 NOT NULL 컬럼 추가하기
이미 생성된 테이블에 NOT NULL 컬럼을 추가하려면 ALTER TABLE 명령을 사용합니다. 기본 문법은 다음과 같습니다.
ALTER TABLE yourTableName ADD yourColumnName NOT NULL
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table AddNotNull
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.43 sec)
이제 ALTER 명령을 사용해 기존 테이블에 NOT NULL 제약 조건이 적용된 컬럼을 추가합니다. 여기서는 NOT NULL 제약 조건을 가진 Age 컬럼을 추가해 보겠습니다.
mysql> alter table AddNotNull add Age int not null; Query OK, 0 rows affected (0.44 sec) Records: 0 Duplicates: 0 Warnings: 0
desc 명령으로 테이블 구조를 확인할 수 있습니다.
mysql> desc AddNotNull;
실행 결과를 보면 Age 컬럼의 Null 항목이 NO로 표시된 것을 확인할 수 있습니다.
+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | Id | int(11) | YES | | NULL | | | Name | varchar(100) | YES | | NULL | | | Age | int(11) | NO | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.08 sec)
NOT NULL 컬럼에 NULL 삽입 시 동작 확인
이제 Age 컬럼에 NULL 값을 삽입해 보겠습니다. NOT NULL 제약 조건이 걸려 있으므로 에러가 발생합니다.
mysql> insert into AddNotNull values(1,'John',NULL); ERROR 1048 (23000): Column 'Age' cannot be null
반면 다른 레코드처럼 Age에 정상적인 값을 넣으면 에러 없이 저장됩니다. 참고로 NOT NULL이 선언되지 않은 Id, Name 컬럼에는 NULL을 넣어도 문제가 없습니다.
mysql> insert into AddNotNull values(NULL,NULL,23); Query OK, 1 row affected (0.22 sec)
SELECT 문으로 전체 레코드를 조회해 결과를 확인해 보겠습니다.
mysql> select *from AddNotNull;
실행 결과는 다음과 같습니다.
+------+------+-----+ | Id | Name | Age | +------+------+-----+ | NULL | NULL | 23 | +------+------+-----+ 1 row in set (0.00 sec)
정리
- 테이블 생성 시: CREATE TABLE 문에서 컬럼 정의 뒤에
NOT NULL을 붙여 지정합니다. - 기존 테이블에 추가 시:
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 NOT NULL;형태로 추가합니다. - NOT NULL 컬럼에 NULL을 삽입하면
ERROR 1048 (23000): Column '컬럼명' cannot be null에러가 발생합니다. DESC 테이블명;명령으로 Null 항목이 NO로 설정되었는지 확인할 수 있습니다.