MySQL AUTO_INCREMENT 열에 사용자 지정 값 넣기
MySQL에서 AUTO_INCREMENT로 설정된 열에도 일반 INSERT 문을 사용하면 원하는 값을 직접 삽입할 수 있습니다. 자동 증가 열이라고 해서 반드시 MySQL이 값을 생성하도록 두어야 하는 것은 아니며, 명시적으로 값을 지정하면 그 값이 그대로 저장됩니다.
기본 문법은 다음과 같습니다.
INSERT INTO 테이블명 (ID열이름, 다른열이름) VALUES (값1, '값2');
1. 테스트용 테이블 생성
먼저 AUTO_INCREMENT 기본 키를 가진 테이블을 만들어 보겠습니다.
mysql> create table InsertValueInAutoIncrement
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (0.59 sec)
2. 데이터 삽입하기
이제 insert 명령으로 레코드를 추가합니다. 일부 레코드는 UserId를 생략해 자동 증가 값을 사용하고, 일부 레코드에는 UserId 값을 직접 지정하여 삽입합니다.
mysql> insert into InsertValueInAutoIncrement(UserName) values('John');
Query OK, 1 row affected (0.19 sec)
mysql> insert into InsertValueInAutoIncrement(UserName) values('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into InsertValueInAutoIncrement(UserName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into InsertValueInAutoIncrement(UserName) values('Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into InsertValueInAutoIncrement(UserId,UserName) values(100,'Maxwell');
Query OK, 1 row affected (0.18 sec)
mysql> insert into InsertValueInAutoIncrement(UserName) values('James');
Query OK, 1 row affected (0.20 sec)
mysql> insert into InsertValueInAutoIncrement(UserId,UserName) values(1000,'Larry');
Query OK, 1 row affected (0.12 sec)3. 결과 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from InsertValueInAutoIncrement;
실행 결과는 다음과 같습니다.
+--------+----------+
| UserId | UserName |
+--------+----------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
| 4 | Bob |
| 100 | Maxwell |
| 101 | James |
| 1000 | Larry |
+--------+----------+
7 rows in set (0.00 sec)
동작 방식 정리
결과를 보면 몇 가지 중요한 특징을 확인할 수 있습니다.
첫째, UserId를 지정하지 않으면 자동 증가 값이 순서대로 할당됩니다(John=1, Carol=2, Sam=3, Bob=4).
둘째, UserId에 100을 직접 지정한 Maxwell의 경우 해당 값이 그대로 저장되었습니다.
셋째, 이후 James는 별도 지정 없이 삽입되었는데, 자동 증가 카운터가 이미 100까지 올라갔기 때문에 101이 할당되었습니다. 마찬가지로 1000을 지정한 Larry 이후에는 카운터가 1000을 넘게 됩니다.
즉, AUTO_INCREMENT 열에 명시적으로 큰 값을 삽입하면 내부 카운터가 그 값보다 항상 크도록 갱신되므로, 이후 자동 생성되는 값들은 중복 없이 계속 증가하게 됩니다. 이러한 특성을 활용하면 필요에 따라 특정 ID를 예약하거나 직접 관리할 수 있습니다.