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

MySQL 저장 프로시저 내에서 START TRANSACTION으로 트랜잭션을 시작하는 방법

MySQL에서 START TRANSACTION 문은 새로운 트랜잭션을 시작하고 자동 커밋(auto-commit) 모드를 비활성화하는 역할을 합니다. 이를 활용하면 저장 프로시저 내부에서도 여러 데이터 변경 작업을 하나의 트랜잭션 단위로 묶어 처리할 수 있습니다.

아래 예제에서는 START TRANSACTION을 포함하는 저장 프로시저를 생성하고, 이 프로시저가 실행될 때 employee.tbl 테이블에 새로운 레코드를 삽입하도록 구성했습니다. 먼저 현재 테이블의 데이터는 다음과 같습니다.

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Rahul   |
+----+---------+
3 rows in set (0.00 sec)

저장 프로시저 생성 예제

구분자(Delimiter)를 변경한 후, BEGIN과 END 블록 사이에 START TRANSACTION과 INSERT 문을 작성하여 저장 프로시저를 만듭니다.

mysql> Delimiter //
mysql> Create Procedure st_transaction()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values ('Saurabh');
    -> END //
Query OK, 0 rows affected (0.00 sec)

프로시저 호출 및 결과 확인

생성된 저장 프로시저를 CALL 문으로 호출하면, 트랜잭션이 시작되고 해당 테이블에 새로운 값이 삽입됩니다.

mysql> Delimiter ;
mysql> Call st_transaction();
Query OK, 0 rows affected (0.17 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Rahul   |
| 4  | Saurabh |
+----+---------+
4 rows in set (0.00 sec)

실행 결과를 보면 'Saurabh'라는 이름의 레코드(Id 4)가 정상적으로 추가된 것을 확인할 수 있습니다. 이처럼 저장 프로시저 내에서 START TRANSACTION을 사용하면 데이터 일관성을 유지하면서 삽입, 수정, 삭제 작업을 안전하게 처리할 수 있습니다. 필요에 따라 COMMIT 또는 ROLLBACK 문을 함께 사용하면 트랜잭션을 더욱 효과적으로 제어할 수 있습니다.