Maison  >  Article  >  base de données  >  Quand une transaction n'est-elle pas automatiquement annulée dans SQL ?

Quand une transaction n'est-elle pas automatiquement annulée dans SQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 07:49:281061parcourir

When is a Transaction Not Automatically Rolled Back in SQL?

Annulation automatique des transactions

La question tourne autour du comportement des transactions lorsqu'une erreur se produit dans un bloc d'instructions SQL entouré de START TRANSACTION et ENGAGER LA TRANSACTION. L'OP remarque que lorsqu'une erreur de syntaxe est rencontrée avant l'instruction COMMIT TRANSACTION, la transaction est automatiquement annulée.

Mécanisme d'annulation de transaction

Non, les transactions ne sont pas annulées revenir immédiatement après avoir rencontré une erreur. Cependant, certaines applications clientes peuvent adopter des politiques spécifiques pour la gestion des erreurs.

Par exemple, dans le client de ligne de commande mysql :

  • Une erreur lors de l'exécution est généralement arrête le processus d'exécution et entraîne la fermeture du client.
  • Quitter pendant qu'une transaction est en cours entraîne automatiquement l'annulation de la transaction.

Personnalisation de la politique de restauration

Lorsque vous créez vos propres applications, vous contrôlez les politiques d'annulation des transactions. Cependant, notez qu'il existe des exceptions où une restauration est appliquée :

  1. Déconnexion du client : la fermeture ou la déconnexion de la base de données déclenche toujours une restauration de la transaction.
  2. Délai d'attente de blocage/verrouillage : Lorsqu'un blocage ou un délai d'attente de verrouillage se produit, une restauration implicite a lieu.

Pour tous les autres scénarios, si une erreur est rencontrée lors d'une transaction , l'erreur est renvoyée et le développeur a le choix de valider ou d'abandonner la transaction.

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