MySQL에서 마지막으로 삽입된 행 가져오기
MySQL 테이블에 AUTO_INCREMENT 컬럼이 설정되어 있다면, LAST_INSERT_ID() 함수를 사용하여 가장 최근에 삽입된 레코드의 ID를 손쉽게 확인할 수 있습니다. 이 함수는 현재 세션에서 마지막으로 성공적으로 삽입된 행의 자동 증가 값을 반환합니다.
기본 문법
SELECT LAST_INSERT_ID();
예제 테이블 생성하기
실제 동작을 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 LastInsertedRow라는 이름의 테이블을 생성합니다.
mysql> create table LastInsertedRow -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(20), -> UserAge int -> ); Query OK, 0 rows affected (0.56 sec)
여기서 Id 컬럼은 AUTO_INCREMENT 속성과 PRIMARY KEY가 함께 적용되어, 새로운 행이 추가될 때마다 자동으로 순차적인 번호가 부여됩니다.
테스트 데이터 삽입하기
이제 INSERT 명령어를 사용해 여러 개의 레코드를 테이블에 추가합니다.
mysql> insert into LastInsertedRow(UserName,UserAge) values('John',23);
Query OK, 1 row affected (0.19 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Carol',24);
Query OK, 1 row affected (0.16 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Bob',24);
Query OK, 1 row affected (0.08 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Larry',26);
Query OK, 1 row affected (0.09 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Maxwell',27);
Query OK, 1 row affected (0.10 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('David',22);
Query OK, 1 row affected (0.10 sec)전체 데이터 확인하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from LastInsertedRow;
실행 결과는 다음과 같습니다.
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 23 | | 2 | Carol | 24 | | 3 | Bob | 24 | | 4 | Larry | 26 | | 5 | Maxwell | 27 | | 6 | David | 22 | +----+----------+---------+ 6 rows in set (0.00 sec)
총 6개의 레코드가 저장되었으며, 각 행에는 1부터 6까지의 ID가 자동으로 할당된 것을 확인할 수 있습니다.
마지막 삽입 ID 조회하기
가장 마지막에 삽입된 행의 ID를 확인하려면 다음 쿼리를 실행합니다.
mysql> select last_insert_id();
실행 결과는 다음과 같습니다.
+------------------+ | last_insert_id() | +------------------+ | 6 | +------------------+ 1 row in set (0.00 sec)
결과값 6은 가장 최근에 삽입된 'David' 레코드의 ID를 의미합니다.
마지막으로 삽입된 전체 행 가져오기
ID 값뿐만 아니라 해당 행의 모든 컬럼 데이터를 함께 조회하고 싶다면, 서브쿼리를 활용한 아래 쿼리를 사용하면 됩니다.
mysql> select *from LastInsertedRow where Id=(SELECT LAST_INSERT_ID());
실행 결과는 다음과 같습니다.
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 6 | David | 22 | +----+----------+---------+ 1 row in set (0.05 sec)
정리 및 참고 사항
LAST_INSERT_ID()는 연결(connection) 단위로 관리되기 때문에, 여러 사용자가 동시에 데이터를 삽입하더라도 각 세션은 자신이 마지막으로 삽입한 행의 ID만 정확하게 반환받습니다. 따라서 멀티 유저 환경에서도 안전하게 사용할 수 있습니다. 또한 하나의 INSERT 문으로 여러 행을 한 번에 삽입한 경우에는 첫 번째 행의 ID가 반환된다는 점도 기억해 두면 좋습니다.