Select*fromemployee.tbl;+----+---------+ |Id|Nom +----+---------+|1 |Mohan ||2 |Gaurav ||3&nb"/> Select*fromemployee.tbl;+----+---------+ |Id|Nom +----+---------+|1 |Mohan ||2 |Gaurav ||3&nb">

Maison  >  Article  >  base de données  >  Que se passe-t-il lorsque nous utilisons COMMIT dans une procédure stockée MySQL et que l'une des transactions sous la transaction START échoue ?

Que se passe-t-il lorsque nous utilisons COMMIT dans une procédure stockée MySQL et que l'une des transactions sous la transaction START échoue ?

WBOY
WBOYavant
2023-08-27 18:09:11849parcourir

当我们在 MySQL 存储过程中使用 COMMIT 并且 START 事务下的事务之一失败时,会发生什么情况?

Supposons que l'une des requêtes échoue ou génère une erreur et que l'autre requête s'exécute correctement, MySQL valide toujours les modifications pour la requête correctement exécutée. Cela peut être compris à partir de l'exemple suivant où nous utilisons la table "employee.tbl" avec les données suivantes -

Exemple

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)

Maintenant, lorsque nous appelons cette procédure, nous savons que la requête UPDATE produira une erreur comme nous le faisons. Je n'ai pas l'identifiant sur notre table =10. Mais puisque la première requête s'exécutera avec succès, COMMIT enregistrera les modifications apportées à la table.

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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer