MySQL에서 열의 NOT NULL 제약 조건 제거하기
MySQL에서 이미 생성된 열에 설정된 NOT NULL 제약 조건을 제거하려면 ALTER 명령어를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
ALTER TABLE 테이블이름 MODIFY COLUMN 열이름 데이터타입;
즉, 열을 다시 정의할 때 NOT NULL 옵션을 빼고 원하는 데이터 타입만 지정하면 해당 열의 NOT NULL 제약이 자동으로 해제됩니다.
1. 예제용 테이블 생성
먼저 실습을 위한 테이블을 만들어 보겠습니다. 아래 쿼리는 Name 열에 NOT NULL 제약이 걸린 테이블을 생성합니다.
mysql> create table NotNullDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20) NOT NULL,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.58 sec)2. NOT NULL 제약으로 인한 오류 확인
위 테이블의 Name 열에는 NOT NULL 제약이 적용되어 있기 때문에, NULL 값을 삽입하려고 하면 MySQL은 오류를 반환합니다.
mysql> insert into NotNullDemo(Name) values(NULL); ERROR 1048 (23000): Column 'Name' cannot be null
오류 메시지를 통해 Name 열에 NULL 값이 허용되지 않는다는 것을 확인할 수 있습니다.
3. ALTER 명령어로 NOT NULL 제약 제거
이제 ALTER TABLE ... MODIFY COLUMN 구문을 사용해 Name 열의 NOT NULL 제약을 제거해 보겠습니다.
mysql> alter table NotNullDemo MODIFY COLUMN Name varchar(20); Query OK, 0 rows affected (1.78 sec) Records: 0 Duplicates: 0 Warnings: 0
열을 재정의할 때 NOT NULL 키워드를 생략했기 때문에, 이제 해당 열에는 NULL 값을 자유롭게 저장할 수 있습니다.
4. NULL 값 포함 데이터 삽입
제약 조건이 해제된 후에는 NULL 값과 일반 값을 섞어서 자유롭게 레코드를 삽입할 수 있습니다.
mysql> insert into NotNullDemo(Name) values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into NotNullDemo(Name) values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into NotNullDemo(Name) values('Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into NotNullDemo(Name) values(NULL);
Query OK, 1 row affected (0.10 sec)
mysql> insert into NotNullDemo(Name) values(NULL);
Query OK, 1 row affected (0.10 sec)
mysql> insert into NotNullDemo(Name) values('John');
Query OK, 1 row affected (0.13 sec)5. 결과 확인
SELECT 문을 사용해 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from NotNullDemo;
실행 결과는 다음과 같습니다.
+----+------+ | Id | Name | +----+------+ | 1 | NULL | | 2 | Sam | | 3 | Mike | | 4 | NULL | | 5 | NULL | | 6 | John | +----+------+ 6 rows in set (0.00 sec)
출력 결과에서 볼 수 있듯이, Name 열에 더 이상 NOT NULL 제약이 없으므로 NULL 값이 여러 개 저장된 것을 확인할 수 있습니다.
정리
MySQL에서 열의 NOT NULL 제약 조건을 제거하는 핵심은 ALTER TABLE과 MODIFY COLUMN을 함께 사용하는 것입니다. 이때 반드시 기존 열과 동일한 데이터 타입을 지정해야 하며, 필요에 따라 DEFAULT 값 등 다른 속성도 함께 유지하거나 조정할 수 있다는 점을 기억하세요.