Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 저장 프로시저에서 COMMIT를 사용하고 START 트랜잭션 아래에 있는 트랜잭션 중 하나가 실패하면 어떻게 됩니까?


쿼리 중 하나가 실패하거나 오류를 생성하고 MySQL이 제대로 실행한 다른 쿼리가 여전히 제대로 실행된 쿼리의 변경 사항을 커밋한다고 가정합니다. 다음 데이터가 있는 'employee.tbl' 테이블을 사용하는 다음 예에서 이해할 수 있습니다. -

예시

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

mysql> Delimiter //

mysql> Create Procedure st_transaction_commit_save()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl (name) values ('Rahul');
    -> UPDATE employee.tbl set name = 'Gurdas' WHERE id = 10;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.00 sec)

이제 이 프로시저를 호출할 때 테이블에 id =10이 없기 때문에 UPDATE 쿼리가 오류를 생성한다는 것을 알고 있습니다. 그러나 첫 번째 쿼리가 성공적으로 실행되므로 COMMIT가 변경 사항을 테이블에 저장합니다.

mysql> Delimiter ;
mysql> Call st_transaction_commit_save()//
Query OK, 0 rows affected (0.07 sec)

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