MySQL 자동 증가 컬럼에 NULL을 전달할 수 있을까?
네, 가능합니다. AUTO_INCREMENT로 설정된 컬럼에 NULL 값을 전달하면 MySQL이 자동으로 다음 시퀀스 번호를 생성해 할당합니다. 기본 문법은 아래와 같습니다.
INSERT INTO yourTableName VALUES(NULL, yourValue1, yourValue2, ...N);
그럼 실제 예제를 통해 동작 방식을 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 ClientId 컬럼을 AUTO_INCREMENT 기본 키로 설정한 테이블을 생성합니다.
mysql> CREATE TABLE DemoTable1503
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(20),
-> ClientAge int
-> );
Query OK, 0 rows affected (0.45 sec)ClientId 컬럼에는 NOT NULL 제약 조건과 AUTO_INCREMENT가 함께 설정되어 있습니다. 이 경우 INSERT 시 NULL을 전달해도 NOT NULL 제약에 위배되지 않습니다. MySQL이 NULL 대신 자동으로 증가된 값을 채워 넣기 때문입니다.
2단계: 레코드 삽입하기
INSERT 명령을 사용해 여러 레코드를 추가합니다. 첫 번째 값 자리에 NULL을 전달하면 자동 증가가 정상적으로 작동합니다.
mysql> INSERT INTO DemoTable1503 VALUES(NULL,'Chris',25); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL,'David',28); Query OK, 1 row affected (0.37 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL,'Bob',45); Query OK, 1 row affected (0.09 sec) mysql> INSERT INTO DemoTable1503 VALUES(NULL,'Mike',57); Query OK, 1 row affected (0.15 sec)
3단계: 결과 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> SELECT * FROM DemoTable1503;
실행 결과는 다음과 같습니다. ClientId 컬럼에 NULL이 아닌 1부터 순차적으로 증가된 값이 저장된 것을 확인할 수 있습니다.
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1 | Chris | 25 | | 2 | David | 28 | | 3 | Bob | 45 | | 4 | Mike | 57 | +----------+------------+-----------+ 4 rows in set (0.00 sec)
정리
AUTO_INCREMENT 컬럼은 NOT NULL로 선언되어 있어도 INSERT 문에서 해당 위치에 NULL을 전달하면 MySQL이 자동으로 고유한 증가값을 생성합니다. 이는 MySQL의 공식적인 동작 방식이며, 명시적으로 일련번호를 관리하지 않아도 되므로 개발 편의성이 크게 향상됩니다.