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

MySQL 저장 프로시저 하나로 두 테이블에 동시에 값 삽입하는 방법

개요

MySQL에서는 하나의 저장 프로시저(Stored Procedure)를 호출하는 것만으로 여러 테이블에 값을 삽입할 수 있습니다. 이 방식은 반복되는 INSERT 작업을 하나의 로직으로 묶어 코드의 재사용성과 유지보수성을 높여줍니다.

기본 문법

저장 프로시저를 사용해 두 테이블에 값을 삽입하는 기본 문법은 다음과 같습니다.

DELIMITER //
CREATE PROCEDURE yourProcedureName(anyVariableName int)
    BEGIN
    insert into yourTableName1(yourColumnName1) values(yourVariableName);
    insert into yourTableName2(yourColumnName2) values(yourVariableName);
    END
//

BEGIN과 END 사이에 원하는 만큼 INSERT 문을 나열하면, 프로시저 호출 시 해당 문들이 순차적으로 실행됩니다.

예제 테이블 생성

먼저 첫 번째 테이블을 생성합니다.

mysql> create table DemoTable1
    -> (
    -> StudentScore int
    -> );
Query OK, 0 rows affected (0.58 sec)

이어서 두 번째 테이블을 생성합니다.

mysql> create table DemoTable2
    -> (
    -> PlayerScore int
    -> );
Query OK, 0 rows affected (0.52 sec)

저장 프로시저 생성

두 테이블에 동시에 값을 삽입하는 저장 프로시저를 아래와 같이 작성합니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_proc(value int )
    -> BEGIN
    -> insert into DemoTable1(StudentScore) values(value);
    -> insert into DemoTable2(PlayerScore) values(value);
    -> END
-> //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;

여기서 DELIMITER //는 세미콜론(;)과 충돌하지 않도록 구분자를 임시로 변경하는 명령입니다. 프로시저 정의가 끝난 후에는 DELIMITER ;로 원래 상태로 되돌려야 합니다.

저장 프로시저 호출

CALL 명령어를 사용해 저장 프로시저를 호출합니다. 매개변수로 삽입할 값을 전달하면 됩니다.

mysql> call insert_proc(89);
Query OK, 1 row affected (0.29 sec)

결과 확인

SELECT 문으로 두 테이블의 모든 레코드를 조회하여 값이 정상적으로 삽입되었는지 확인합니다.

mysql> select * from DemoTable1;
+--------------+
| StudentScore |
+--------------+
|           89 |
+--------------+
1 row in set (0.00 sec)
mysql> select * from DemoTable2;
+-------------+
| PlayerScore |
+-------------+
|          89 |
+-------------+
1 row in set (0.00 sec)

위 결과에서 볼 수 있듯이, 저장 프로시저를 한 번만 호출했음에도 두 테이블 모두에 값 89가 성공적으로 삽입된 것을 확인할 수 있습니다.

정리

저장 프로시저를 활용하면 여러 테이블에 대한 INSERT 작업을 단일 호출로 처리할 수 있어 애플리케이션 코드가 간결해지고, 데이터 일관성 유지에도 도움이 됩니다. 필요에 따라 트랜잭션(START TRANSACTION, COMMIT)을 함께 사용하면 더욱 안전하게 처리할 수 있습니다.