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