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

MySQL에서 마지막으로 삽입된 행 조회하는 방법: LAST_INSERT_ID() 완벽 가이드

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가 반환된다는 점도 기억해 두면 좋습니다.