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

MySQL 저장 프로시저를 활용해 두 개의 테이블에 동시에 레코드 삽입하기

MySQL에서 저장 프로시저로 두 테이블에 레코드 삽입하기

네, 가능합니다. MySQL에서는 저장 프로시저(Stored Procedure)를 활용하면 하나의 호출만으로 두 개 이상의 테이블에 레코드를 삽입할 수 있습니다. 실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 첫 번째 테이블 생성

먼저 학생 정보를 저장할 테이블을 생성합니다.

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(20)
);
Query OK, 0 rows affected (0.56 sec)

2단계: 두 번째 테이블 생성

다음으로 고객 정보를 저장할 두 번째 테이블을 생성합니다.

mysql> create table DemoTable2
(
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(20),
    ClientAge int
);
Query OK, 0 rows affected (0.76 sec)

3단계: 저장 프로시저 생성

이제 위에서 만든 두 테이블에 각각 데이터를 삽입하는 저장 프로시저를 작성합니다. DELIMITER 명령으로 구분자를 변경한 후 프로시저 본문 내에 두 개의 INSERT 문을 순차적으로 배치합니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_into_twoTables(name varchar(100), age int)
    BEGIN
        INSERT INTO DemoTable(StudentFirstName) VALUES(name);
        INSERT INTO DemoTable2(ClientName, ClientAge) VALUES(name, age);
    END
    //
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;

프로시저 생성이 완료되면 반드시 DELIMITER ;로 구분자를 원래대로 되돌려야 합니다.

4단계: 저장 프로시저 호출

CALL 명령을 사용하여 저장 프로시저를 실행합니다. 이름과 나이를 인자로 전달하면 두 테이블에 동시에 레코드가 삽입됩니다.

mysql> call insert_into_twoTables('Tom', 38);
Query OK, 1 row affected, 1 warning (0.41 sec)

5단계: 결과 확인

두 테이블 모두에 정상적으로 레코드가 삽입되었는지 확인해 보겠습니다.

첫 번째 테이블의 전체 레코드를 조회하는 쿼리입니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
| 1         | Tom              |
+-----------+------------------+
1 row in set (0.00 sec)

두 번째 테이블의 전체 레코드를 조회하는 쿼리입니다.

mysql> select *from DemoTable2;

실행 결과는 다음과 같습니다.

+----------+------------+-----------+
| ClientId | ClientName | ClientAge |
+----------+------------+-----------+
| 1        | Tom        | 38        |
+----------+------------+-----------+
1 row in set (0.00 sec)

정리

이처럼 저장 프로시저 안에 여러 개의 INSERT 문을 포함시키면, 애플리케이션에서 여러 쿼리를 각각 실행하지 않고도 단 한 번의 CALL 호출로 여러 테이블에 데이터를 삽입할 수 있습니다. 이 방식은 코드 중복을 줄이고, 데이터 일관성을 유지하며, 네트워크 왕복 횟수를 줄여 성능 향상에도 도움이 됩니다. 필요하다면 프로시저 내부에 트랜잭션 처리를 추가하여 두 삽입 작업이 모두 성공하거나 모두 실패하도록 원자성을 보장할 수도 있습니다.