네, MySQL에서는 새 레코드를 추가하지 않고도 다음에 할당될 기본 키 값을 미리 확인할 수 있습니다. 핵심은 information_schema.tables 뷰의 auto_increment 컬럼을 활용하는 것입니다. 예제와 함께 단계별로 살펴보겠습니다.
1. 테스트 테이블 생성
먼저 AUTO_INCREMENT 기본 키를 가진 테이블을 생성합니다.
mysql> create table DemoTable1399
-> (
-> StudentId int NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (0.53 sec)
2. 샘플 데이터 삽입
insert 문을 사용해 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable1399 values();
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1399 values();
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1399 values();
Query OK, 1 row affected (0.07 sec)
3. 저장된 데이터 확인
select 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select * from DemoTable1399;
실행 결과는 다음과 같습니다.
+-----------+
| StudentId |
+-----------+
| 1 |
| 2 |
| 3 |
+-----------+
3 rows in set (0.00 sec)
현재까지 1, 2, 3번 ID가 순차적으로 할당된 것을 확인할 수 있습니다.
4. 다음 기본 키 조회하기
새 레코드를 삽입하지 않고 다음 기본 키를 얻는 쿼리는 아래와 같습니다. information_schema.tables에서 현재 데이터베이스(table_schema=database())와 대상 테이블 이름으로 조건을 걸어 auto_increment 값을 조회합니다.
mysql> select auto_increment as NextPrimaryKey
-> from information_schema.tables
-> where table_schema=database()
-> and table_name = 'DemoTable1399';
실행 결과는 다음과 같습니다.
+----------------+
| NextPrimaryKey |
+----------------+
| 4 |
+----------------+
1 row in set (0.00 sec)
레코드를 하나도 추가하지 않았음에도 다음 기본 키가 4임을 정확히 알아냈습니다.
참고 사항
information_schema.tables.auto_increment는 서버가 관리하는 AUTO_INCREMENT 카운터의 현재값을 반환하므로, 실제 INSERT 없이도 다음 키 값을 예측할 수 있습니다.- 여러 세션이 동시에 INSERT를 수행하는 환경에서는 이 값을 조회한 시점과 실제 삽입 시점 사이에 값이 달라질 수 있으므로, 동시성이 높은 시스템에서는 참고용으로만 활용하는 것이 안전합니다.
- MySQL 8.0부터는 AUTO_INCREMENT 카운터가 재시작 후에도 유지되어 이전 버전보다 더 일관된 결과를 제공합니다.