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 ?
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 -
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!