MySQL에서 이미 존재하는 열에 NOT NULL 속성을 설정하려면 ALTER TABLE 명령어를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 기존 테이블의 열에 NOT NULL 제약 조건을 추가하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable1949
(
UserId int,
UserName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
UserId와 UserName 두 개의 열을 가진 간단한 테이블입니다. 현재 두 열 모두 NULL 값을 허용하는 상태입니다.
2. ALTER TABLE로 NOT NULL 속성 추가
다음 쿼리를 사용하여 기존 열인 UserName에 NOT NULL 속성을 설정할 수 있습니다.
mysql> alter table DemoTable1949 modify UserName varchar(20) not null; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
MODIFY 절을 사용하면 열의 데이터 타입과 제약 조건을 한 번에 변경할 수 있습니다. 주의할 점은 데이터 타입(varchar(20))까지 함께 명시해야 한다는 것입니다.
3. 테이블 구조 확인
DESC 명령어로 테이블 구조가 올바르게 변경되었는지 확인해 보겠습니다.
mysql> desc DemoTable1949;
실행 결과는 다음과 같습니다.
+----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserName | varchar(20) | NO | | NULL | | +----------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
UserName 열의 Null 항목이 NO로 표시된 것을 확인할 수 있습니다. 이제 해당 열에는 NULL 값을 저장할 수 없습니다.
4. NOT NULL 제약 조건 동작 확인
실제로 NULL 값이 거부되는지 데이터를 삽입하여 테스트해 보겠습니다.
mysql> insert into DemoTable1949 values(101,NULL); ERROR 1048 (23000): Column 'UserName' cannot be null mysql> insert into DemoTable1949 values(101,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1949 values(102,'Bob'); Query OK, 1 row affected (0.00 sec)
NULL을 삽입하려고 하면 ERROR 1048 오류가 발생하며 삽입이 거부됩니다. 반면 정상적인 값을 넣으면 문제없이 저장됩니다.
5. 전체 데이터 조회
SELECT 문으로 저장된 데이터를 확인합니다.
mysql> select * from DemoTable1949;
+--------+----------+ | UserId | UserName | +--------+----------+ | 101 | Chris | | 102 | Bob | +--------+----------+ 2 rows in set (0.00 sec)
정리
MySQL에서 기존 열에 NOT NULL 속성을 추가하는 방법은 매우 간단합니다. ALTER TABLE ... MODIFY 구문을 사용하면 되며, 이때 열의 데이터 타입을 반드시 함께 지정해야 합니다. NOT NULL 제약 조건을 설정하면 필수 값이 누락된 데이터의 입력을 데이터베이스 차원에서 방지할 수 있어 데이터 무결성을 유지하는 데 큰 도움이 됩니다.