Maison > base de données > tutoriel mysql > 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
Libérer: 2023-08-23 20:17:02
avant
1439 Les gens l'ont consulté

我们如何在 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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal