SQL Server SCOPE_IDENTITY()에 해당하는 MySQL 함수
SQL Server의 SCOPE_IDENTITY() 함수와 동일한 역할을 하는 MySQL 함수는 바로 LAST_INSERT_ID()입니다. 기본 문법은 다음과 같습니다.
SELECT LAST_INSERT_ID();
이 함수는 현재 세션에서 가장 마지막에 삽입된 레코드의 AUTO_INCREMENT ID 값을 반환합니다.
이번 글에서는 기본 키(Primary Key) 컬럼이 있는 테이블을 활용해 LAST_INSERT_ID() 함수의 실제 동작 방식을 예제와 함께 살펴보겠습니다.
1. 테스트용 테이블 생성
먼저 두 개의 테이블을 생성합니다. 첫 번째 테이블을 만드는 쿼리는 다음과 같습니다.
<TestOnLastInsertIdDemo>
mysql> create table TestOnLastInsertIdDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (0.95 sec)
이어서 두 번째 테이블을 생성합니다.
<TestOnLastInsertIdDemo2>
mysql> create table TestOnLastInsertIdDemo2
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (2.79 sec)
2. 레코드 삽입 및 트리거 생성
INSERT 명령을 사용해 두 번째 테이블에 여러 개의 레코드를 삽입합니다.
mysql> insert into TestOnLastInsertIdDemo2 values(),(),(),(),(),(),(),();
Query OK, 8 rows affected (0.21 sec)
Records: 8 Duplicates: 0 Warnings: 0
다음으로 'TestOnLastInsertIdDemo' 테이블에 트리거를 생성합니다. 이 트리거는 첫 번째 테이블에 레코드가 삽입될 때마다 두 번째 테이블에도 자동으로 레코드를 추가하는 역할을 합니다.
mysql> delimiter //
mysql> create trigger insertingTrigger after insert on TestOnLastInsertIdDemo
-> for each row begin
-> insert into TestOnLastInsertIdDemo2 values();
-> end;
-> //
Query OK, 0 rows affected (0.19 sec)
mysql> delimiter ;
3. LAST_INSERT_ID() 실행 결과 확인
이제 TestOnLastInsertIdDemo 테이블에 레코드를 삽입해 보겠습니다.
mysql> insert into TestOnLastInsertIdDemo values();
Query OK, 1 row affected (0.31 sec)
그다음 LAST_INSERT_ID() 함수를 호출합니다.
mysql> select last_insert_id();
실행 결과는 다음과 같습니다.
+------------------+
| last_insert_id() |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
결과 분석
위 결과에서 값이 '1'로 반환된 이유는, LAST_INSERT_ID() 함수가 트리거 내부에서 삽입이 일어난 테이블(TestOnLastInsertIdDemo2)이 아닌, 사용자가 직접 INSERT를 수행한 원본 테이블(TestOnLastInsertIdDemo)의 ID만을 기준으로 하기 때문입니다. 즉, 트리거 안에서 발생한 INSERT 작업은 LAST_INSERT_ID()의 반환값에 영향을 주지 않습니다.
이러한 동작 방식은 특정 범위(scope) 내에서 생성된 마지막 ID만 반환하는 SQL Server의 SCOPE_IDENTITY()와 매우 유사합니다. 따라서 MySQL에서 자동 증가 키 값을 안전하게 조회하려면 LAST_INSERT_ID()를 사용하는 것이 올바른 방법입니다.