ALTER TABLE 문을 사용하면 기존 테이블의 특정 열에 설정된 NOT NULL 제약 조건을 간단히 제거할 수 있습니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
예시
먼저 'test123'이라는 테이블의 'ID' 열에 NOT NULL 제약 조건이 설정되어 있다고 가정해 보겠습니다. DESCRIBE 명령어로 현재 테이블 구조를 확인하면 다음과 같습니다.
mysql> DESCRIBE test123; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | ID | int(11) | NO | | NULL | | | Date | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
'ID' 열의 Null 항목이 NO로 표시되어 있는데, 이는 해당 열에 NOT NULL 제약 조건이 적용되어 있다는 의미입니다. 이제 이 제약 조건을 제거하려면 다음과 같이 ALTER TABLE ... MODIFY 구문을 사용합니다.
mysql> ALTER TABLE test123 MODIFY ID INT NULL; Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESCRIBE test123; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | ID | int(11) | YES | | NULL | | | Date | date | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.06 sec)
위 결과 집합을 보면 'ID' 열의 Null 값이 NO에서 YES로 변경된 것을 확인할 수 있습니다. 이는 NOT NULL 제약 조건이 성공적으로 제거되었음을 의미합니다.
NULL 키워드 생략하기
참고로 위 쿼리에서 MODIFY 키워드 뒤에 오는 NULL 키워드는 선택 사항입니다. MySQL에서는 열 정의에 NULL 또는 NOT NULL을 명시하지 않으면 기본적으로 NULL이 허용되기 때문에, 다음과 같은 쿼리 역시 동일한 결과를 얻습니다.
mysql> ALTER TABLE test123 MODIFY ID INT; Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0
다만 주의할 점은, MODIFY 구문 사용 시 데이터 타입(INT)까지 함께 지정해야 한다는 것입니다. 열 이름만 변경하는 것이 아니라 전체 열 정의를 다시 작성하는 방식이기 때문입니다. 따라서 실무에서는 기존 열의 데이터 타입과 속성을 정확히 확인한 후 쿼리를 작성하는 것이 안전합니다.