Maison  >  Article  >  base de données  >  Comment pouvons-nous effectuer une transaction ROLLBACK dans une procédure stockée MySQL ?

Comment pouvons-nous effectuer une transaction ROLLBACK dans une procédure stockée MySQL ?

WBOY
WBOYavant
2023-08-23 20:17:021371parcourir

我们如何在 MySQL 存储过程中执行 ROLLBACK 事务?

Nous savons que ROLLBACK annulera toutes les modifications apportées à la base de données après le début de la transaction. Pour exécuter ROLLBACK dans une procédure stockée MySQL, nous devons déclarer le gestionnaire EXIT. Nous pouvons utiliser des gestionnaires pour les avertissements sqlException ou SQL. Cela peut être compris à l'aide d'un exemple où une procédure stockée de ROLLBACK est créée pour une table avec les détails suivants -

mysql> SHOW CREATE table gg\G
*************************** 1. row ***************************
       Table: gg
Create Table: CREATE TABLE `gg` (
   `Id` int(11) NOT NULL AUTO_INCREMENT,
   `Name` varchar(30) NOT NULL,
   PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Nous pouvons voir que la colonne "nom" ne peut pas avoir de valeur NULL et la table a les données suivantes -

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)

Exemple

mysql> Delimiter //
mysql> Create Procedure st_transaction_Rollback()
    -> BEGIN
    -> DECLARE exit handler for sqlexception
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> DECLARE exit handler for sqlwarning
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values();
    -> UPDATE employee.tbl set name = 'YashPal' where id = 5;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.02 sec)

mysql> Delimiter ;
mysql> CALL st_transaction_Rollback ()
Query OK, 0 rows affected (0.00 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)

À partir de l'ensemble de résultats ci-dessus, nous pouvons voir que les modifications apportées par l'instruction UPDATE ont été ROLLBACKED car la première requête d'INSERT a généré une erreur (en essayant d'insérer une valeur NULL).

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