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 문을 함께 사용하면 트랜잭션을 더욱 효과적으로 제어할 수 있습니다.