Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 SQL Server의 SCOPE_IDENTITY() 함수와 동일한 기능은 무엇일까?

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()를 사용하는 것이 올바른 방법입니다.