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. 저장 프로시저 작성
이제 위에서 만든 두 테이블에 각각 데이터를 삽입하는 저장 프로시저를 생성합니다. 프로시저 내부에는 두 개의 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 ;참고: 저장 프로시저 본문 안에 여러 SQL 문이 포함되므로, 구분자(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 명령 한 번만 호출하면 되므로, 코드가 간결해지고 데이터 일관성 유지에도 도움이 됩니다. 특히 트랜잭션과 함께 활용하면 두 테이블의 삽입 작업을 더욱 안전하게 처리할 수 있습니다.