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

MySQL 저장 프로시저 내에서 트랜잭션 COMMIT 처리하는 방법

MySQL에서 START TRANSACTION은 새로운 트랜잭션을 시작하는 명령이며, COMMIT은 트랜잭션이 시작된 이후 수행된 모든 변경 사항을 데이터베이스에 영구적으로 반영하는 역할을 합니다. 이 두 구문을 저장 프로시저(Stored Procedure) 안에 함께 사용하면 여러 개의 DML 작업을 하나의 논리적 단위로 묶어 안전하게 처리할 수 있습니다.

아래 예제에서는 START TRANSACTION과 COMMIT을 포함한 저장 프로시저를 생성합니다. 이 프로시저는 'employee.tbl' 테이블에 새 레코드를 삽입하고 기존 레코드를 수정한 뒤, 모든 변경 사항을 커밋합니다. 먼저 현재 테이블의 데이터는 다음과 같습니다.

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

저장 프로시저 생성 예제

아래와 같이 DELIMITER를 변경하여 저장 프로시저를 생성합니다. 프로시저 내부에서 INSERT와 UPDATE가 하나의 트랜잭션으로 묶이고, 마지막에 COMMIT으로 변경 사항이 확정됩니다.

mysql> Delimiter //
mysql> Create Procedure st_transaction_commit()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values ('Yash');
    -> UPDATE employee.tbl set name = 'Sohan' WHERE id = 3;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.03 sec)

프로시저 호출 및 결과 확인

생성된 프로시저를 CALL 문으로 호출하면, 테이블에 새 레코드가 삽입되고 기존 값이 갱신되며, 그 결과가 즉시 커밋되어 데이터베이스에 반영됩니다.

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

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

핵심 정리

  • START TRANSACTION: 트랜잭션을 시작하며, 이후의 SQL 문들은 임시 상태로 실행됩니다.
  • COMMIT: 트랜잭션 내의 INSERT, UPDATE 등 모든 변경 사항을 확정하고 영구 저장합니다.
  • ROLLBACK: 오류 발생 시 COMMIT 대신 사용하면 변경 사항을 취소할 수 있으므로, 실무에서는 예외 처리와 함께 활용하는 것이 좋습니다.

이처럼 저장 프로시저 내에서 트랜잭션 제어 구문을 사용하면 데이터 일관성을 유지하면서 복수의 작업을 안전하게 처리할 수 있습니다.