Maison  >  Article  >  base de données  >  Comment restaurer automatiquement les transactions MySQL en cas d'exceptions ?

Comment restaurer automatiquement les transactions MySQL en cas d'exceptions ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-23 03:24:10210parcourir

How to Automatically Roll Back MySQL Transactions on Exceptions?

Annulation des transactions MySQL en cas d'exceptions

Lors de l'exécution d'une série de commandes MySQL, il est crucial de gérer les erreurs pour garantir l'intégrité des données. Une façon d'y parvenir consiste à annuler automatiquement l'intégralité de la transaction au cas où une commande rencontrerait une exception.

Pour configurer l'annulation automatique, utilisez la syntaxe DECLARE ... HANDLER :

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 ;

Cette procédure définit un gestionnaire (CONTINUE HANDLER FOR SQLEXCEPTION) qui définit l'indicateur _rollback sur 1 si une exception SQL se produit. Après avoir exécuté les commandes individuelles au sein de la transaction, il vérifie l'indicateur _rollback pour déterminer s'il faut annuler ou valider la transaction.

En implémentant cette technique, toute exception rencontrée lors de l'exécution de la commande entraînera l'annulation de l'intégralité de la transaction. en arrière, en garantissant que les modifications partielles ne sont pas appliquées à la base de 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!

Déclaration:
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