MySQL에서 AUTO_INCREMENT 속성이 설정된 컬럼에 가장 최근에 자동으로 할당된 시퀀스 번호(값)를 확인하려면 LAST_INSERT_ID() 함수를 사용하면 됩니다.
LAST_INSERT_ID() 함수란?
LAST_INSERT_ID()는 현재 연결(세션)에서 가장 최근에 실행된 INSERT 문에 의해 AUTO_INCREMENT 컬럼에 생성된 값을 반환하는 MySQL 함수입니다. 이 함수는 세션별로 동작하기 때문에, 다른 사용자의 INSERT 작업과 간섭 없이 자신이 방금 삽입한 행의 ID를 정확하게 얻을 수 있다는 장점이 있습니다.
사용 예제
먼저 AUTO_INCREMENT가 적용된 테이블을 생성합니다.
mysql> Create table Employee(Id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(5)); Query OK, 0 rows affected (0.13 sec)
그다음 두 개의 레코드를 삽입합니다. Id 컬럼은 직접 지정하지 않아도 자동으로 순번이 부여됩니다.
mysql> Insert into Employee(Name) Values('Harvinder');
Query OK, 1 row affected (0.06 sec)
mysql> Insert into Employee(Name) Values('Suresh');
Query OK, 1 row affected (0.07 sec)테이블 내용을 조회하면 Id가 1, 2로 자동 증가되어 저장된 것을 확인할 수 있습니다.
mysql> Select * from Employee; +----+-----------+ | Id | Name | +----+-----------+ | 1 | Harvinder | | 2 | Suresh | +----+-----------+ 2 rows in set (0.00 sec)
이제 LAST_INSERT_ID() 함수를 실행하면 가장 최근에 AUTO_INCREMENT에 의해 할당된 시퀀스 번호인 2가 반환됩니다.
mysql> Select Last_insert_id(); +------------------+ | Last_insert_id() | +------------------+ | 2 | +------------------+ 1 row in set (0.00 sec)
주요 특징 및 주의 사항
- 세션 단위 동작: LAST_INSERT_ID()는 연결 단위로 관리되므로, 여러 클라이언트가 동시에 INSERT를 수행해도 서로의 값에 영향을 주지 않습니다.
- 다중 행 삽입: 하나의 INSERT 문으로 여러 행을 삽입한 경우, 첫 번째 행에 할당된 ID가 아닌 마지막 행의 ID를 반환합니다.
- 테이블 무관: 마지막 INSERT가 발생한 테이블이 어떤 테이블이든 상관없이 해당 연결의 최근 삽입 ID를 반환합니다.