MySQL에서 기존 테이블의 열을 NULL 값을 허용하도록 변경하려면 ALTER 명령어와 함께 CHANGE 절을 사용하면 됩니다. 기본 문법은 다음과 같습니다.
ALTER TABLE 테이블명 CHANGE 열이름 열이름 데이터타입 NULL DEFAULT NULL;
여기서 핵심은 열 이름을 두 번 지정한다는 점입니다. CHANGE 절은 원래 열 이름 변경을 위한 것이지만, 같은 이름을 반복해서 사용하면 데이터 타입이나 NULL 여부 등 열의 속성만 수정할 수 있습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1356
-> (
-> FirstName varchar(30)
-> );
Query OK, 0 rows affected (0.56 sec)2. 열을 NULL 허용으로 변경
위에서 소개한 문법을 적용하여 FirstName 열을 NULL 값을 허용하도록 변경합니다.
mysql> alter table DemoTable1356 change FirstName FirstName varchar(30) NULL DEFAULT NULL; Query OK, 0 rows affected (0.17 sec) Records: 0 Duplicates: 0 Warnings: 0
변경이 완료되면 이제 해당 열에는 NULL 값뿐만 아니라 아무 값도 입력하지 않은 상태(빈 값)로도 레코드를 삽입할 수 있습니다.
3. 레코드 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가해 보겠습니다. 일반 값, 빈 값, 그리고 명시적인 NULL 값을 모두 포함했습니다.
mysql> insert into DemoTable1356 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1356 values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1356 values();
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1356 values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1356 values(NULL);
Query OK, 1 row affected (0.24 sec)4. 결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1356;
실행 결과는 다음과 같습니다.
+-----------+ | FirstName | +-----------+ | Adam | | John | | NULL | | Bob | | NULL | +-----------+ 5 rows in set (0.00 sec)
출력 결과를 보면 세 번째 행과 다섯 번째 행에 NULL 값이 정상적으로 저장된 것을 확인할 수 있습니다. 이처럼 ALTER TABLE ... CHANGE 구문을 활용하면 기존 테이블 구조를 유지한 채 특정 열의 NULL 허용 여부를 손쉽게 변경할 수 있습니다.