MySQL에서는 테이블의 컬럼에 NULL, 0, 또는 빈 값(No Value)을 삽입하더라도 AUTO_INCREMENT로 설정된 컬럼에는 자동으로 시퀀스 번호가 할당됩니다. 즉, 해당 컬럼에 명시적인 값을 지정하지 않으면 MySQL이 알아서 다음 일련번호를 생성해 줍니다.
예제
먼저 AUTO_INCREMENT 컬럼을 포함한 테이블을 생성해 보겠습니다.
mysql> create table test123(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(10)); Query OK, 0 rows affected (0.15 sec)
위 쿼리는 'id'와 'Name' 두 개의 컬럼을 가진 MySQL 테이블 'test123'을 생성합니다. 여기서 'id' 컬럼은 PRIMARY KEY이면서 AUTO_INCREMENT로 선언되어 있습니다.
이제 'Name' 컬럼에는 값을 넣고, 'id' 컬럼에는 별도의 값을 지정하지 않은 상태로 빈 값(''), '0', 그리고 NULL을 차례대로 삽입해 보겠습니다.
mysql> Insert Into test123(Name) values(''),('0'),(NULL);
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> Select * from test123;
+----+------+
| id | Name |
+----+------+
| 1 | |
| 2 | 0 |
| 3 | NULL |
+----+------+
3 rows in set (0.00 sec)
결과를 보면 'Name' 컬럼에 어떤 형태의 값(빈 문자열, '0', NULL)을 삽입했는지와 관계없이 'id' 컬럼에 1부터 시작하는 시퀀스 번호가 순차적으로 할당된 것을 확인할 수 있습니다. 이처럼 AUTO_INCREMENT 컬럼은 값이 제공되지 않거나 NULL, 0이 입력될 경우 항상 다음 시퀀스 번호를 자동으로 생성합니다.
참고 사항
기본 설정에서는 0을 삽입해도 시퀀스 번호가 생성되지만, SQL 모드에 NO_AUTO_VALUE_ON_ZERO가 설정되어 있으면 0이 실제 값으로 처리되어 시퀀스 번호가 할당되지 않습니다. 따라서 0을 의미 있는 값으로 저장해야 하는 특수한 경우가 아니라면 기본 동작을 그대로 활용하는 것이 좋습니다.