MySQL에서 두 개의 테이블에 서로 다른 자동 증가(auto-increment) ID를 부여해야 하는 경우가 있습니다. 이럴 때 LAST_INSERT_ID() 함수와 사용자 정의 변수를 함께 활용하면 간단하게 해결할 수 있습니다.
LAST_INSERT_ID()는 현재 세션에서 가장 최근에 삽입된 행의 자동 증가 값을 반환하는 함수입니다. 이 값을 변수에 저장한 뒤, 다른 테이블에 삽입할 때 원하는 값으로 조정하여 사용하면 됩니다.
1단계: 첫 번째 테이블 생성
먼저 StudentId 컬럼에 auto_increment 속성을 설정한 테이블을 생성합니다.
mysql> create table DemoTable1 (StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query OK, 0 rows affected (0.58 sec)
2단계: 첫 번째 테이블에 데이터 삽입
insert 명령어를 사용해 레코드를 추가합니다. 자동 증가 컬럼이므로 null 값을 넣으면 ID가 자동으로 생성됩니다.
mysql> insert into DemoTable1 values(null);
Query OK, 1 row affected (0.18 sec)
3단계: 삽입된 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+-----------+
| StudentId |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)
4단계: 마지막 삽입 ID를 사용자 정의 변수에 저장
다음 쿼리로 마지막에 삽입된 ID를 가져와 사용자 정의 변수 @studentId에 저장합니다.
mysql> set @studentId=last_insert_id();
Query OK, 0 rows affected (0.00 sec)
5단계: 두 번째 테이블 생성
두 번째 테이블인 DemoTable2를 생성합니다.
mysql> create table DemoTable2 (Id int);
Query OK, 0 rows affected (0.61 sec)
6단계: 변수를 활용해 서로 다른 자동 증가 ID 삽입
저장해 둔 변수에 1을 더한 값을 두 번째 테이블에 삽입합니다. 이렇게 하면 첫 번째 테이블과 다른 ID가 부여됩니다.
mysql> insert into DemoTable2 values(@studentId+1);
Query OK, 1 row affected (0.13 sec)
7단계: 결과 확인
select 문으로 두 번째 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable2;
실행 결과는 다음과 같습니다.
+------+
| Id |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
핵심 정리
위 과정을 보면 DemoTable1에는 자동 증가로 인해 ID 1이 삽입되었고, LAST_INSERT_ID()로 그 값을 가져온 뒤 +1을 더해 DemoTable2에는 ID 2가 삽입되었습니다. 이처럼 사용자 정의 변수(@변수명)에 LAST_INSERT_ID() 값을 담아두면, 여러 테이블 간에 연관성 있는 ID를 유연하게 관리할 수 있습니다.
참고로 LAST_INSERT_ID()는 세션 단위로 동작하기 때문에, 동시에 여러 클라이언트가 접속하더라도 각 세션마다 독립적인 값을 반환한다는 점도 기억해 두면 좋습니다.