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

사용자 정의 변수를 활용해 두 테이블에 서로 다른 자동 증가 ID 설정하는 방법

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()는 세션 단위로 동작하기 때문에, 동시에 여러 클라이언트가 접속하더라도 각 세션마다 독립적인 값을 반환한다는 점도 기억해 두면 좋습니다.