Maison > base de données > tutoriel mysql > Comment puis-je garantir la restauration des transactions MySQL en cas d'exception ?

Comment puis-je garantir la restauration des transactions MySQL en cas d'exception ?

Barbara Streisand
Libérer: 2024-11-26 00:35:12
original
149 Les gens l'ont consulté

How Can I Ensure MySQL Transaction Rollback on Exception?

Annulation de transaction MySQL en cas d'exception

Vous voulez vous assurer que toutes les commandes MySQL de votre transaction sont exécutées avec succès ou que la transaction entière est annulée en cas d'erreur. Une approche courante consiste à utiliser des blocs try/catch ou des procédures stockées avec gestion des erreurs. Cependant, une option plus polyvalente consiste à exploiter la syntaxe DECLARE ... HANDLER dans MySQL.

La syntaxe DECLARE ... HANDLER vous permet de définir un gestionnaire qui est exécuté lorsqu'une exception SQL spécifiée se produit. En utilisant cette fonctionnalité, vous pouvez configurer MySQL pour annuler automatiquement la transaction en cas d'erreur.

Voici comment l'implémenter :

DELIMITER $$

CREATE PROCEDURE `sp_fail`()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO `tablea` (`date`) VALUES (NOW());
    INSERT INTO `tableb` (`date`) VALUES (NOW());
    INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

DELIMITER ;
Copier après la connexion

Dans cet exemple, une procédure stockée nommée ' sp_fail' est créé avec un gestionnaire d'exceptions SQL. Si une exception se produit lors de l'exécution de la transaction, le gestionnaire définit l'indicateur '_rollback' sur '1'. Une fois toutes les instructions SQL exécutées, une instruction IF vérifie la valeur de '_rollback'. S'il vaut « 1 », la transaction est annulée à l'aide de l'instruction ROLLBACK. Sinon, la transaction est validée à l'aide de l'instruction COMMIT.

En tirant parti de cette technique, vous pouvez vous assurer que vos transactions MySQL sont entièrement exécutées ou entièrement annulées, évitant ainsi les mises à jour partielles ou les incohérences des données.

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:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal