Transactions (BEGIN, COMMIT, ROLLBACK)
Une transaction est une série d'opérations SQL qui sont exécutées comme une unité indivisible. Les transactions permettent de garantir que, même en cas d'erreurs ou de pannes, les données restent dans un état cohérent. Elles suivent le modèle ACID : Atomicité, Cohérence, Isolation et Durabilité.
6.1.1 Syntaxe de base des transactions
Dans MySQL, une transaction commence avec START TRANSACTION
et se termine soit par COMMIT
, soit par ROLLBACK
.
START TRANSACTION
: Débute une transaction.COMMIT
: Valide toutes les modifications effectuées durant la transaction.ROLLBACK
: Annule toutes les modifications effectuées durant la transaction, ramenant la base de données à son état initial.
Exemple de transaction simple :
Supposons que nous souhaitons transférer de l'argent d'un compte à un autre. Nous voulons nous assurer que les deux opérations (débit et crédit) se produisent dans le cadre d'une même transaction pour garantir l'intégrité des données.
Dans cet exemple :
Si les deux requêtes s'exécutent sans problème, les modifications sont validées avec
COMMIT
.Si une erreur survient après la première requête mais avant la seconde, un
ROLLBACK
pourrait être exécuté pour annuler la transaction entière, garantissant ainsi que le compte 1 ne soit pas débité sans que le compte 2 soit crédité.
6.1.2 Utilisation de ROLLBACK
:
Si une erreur survient au milieu d'une transaction, vous pouvez annuler toutes les modifications effectuées jusqu'à ce point en utilisant ROLLBACK
.
Dans cet exemple, même si la première requête a réussi, ROLLBACK
annule la modification, et la base de données revient à son état initial.
6.1.4 Types de transactions
Il existe plusieurs types de transactions, chacune ayant des caractéristiques spécifiques qui influencent la manière dont les données sont manipulées et isolées des autres transactions.
Transactions explicites :
Dans une transaction explicite, vous devez démarrer la transaction avec
START TRANSACTION
et la terminer explicitement avecCOMMIT
ouROLLBACK
.Avantage : Plus de contrôle sur le moment où les modifications sont appliquées.
Exemple :
Transactions implicites :
Certaines opérations comme
INSERT
,UPDATE
, etDELETE
sont automatiquement commises sans qu'il soit nécessaire d'utiliserCOMMIT
. Cela est appelé une transaction implicite.Limitation : Moins de contrôle en cas d'échec car chaque opération est immédiatement appliquée.
Transactions autonomes :
MySQL ne prend pas en charge les transactions autonomes dans une transaction plus large. Ce type de transaction permet de commettre des modifications en cours, même si la transaction principale échoue.
6.1.5 Utilisation de SAVEPOINT
et ROLLBACK TO SAVEPOINT
Les savepoints permettent de créer des points de restauration intermédiaires dans une transaction. Vous pouvez revenir à un état précédent de la transaction sans annuler l'intégralité des modifications effectuées avant ce point.
SAVEPOINT
: Crée un point de restauration intermédiaire dans une transaction.ROLLBACK TO SAVEPOINT
: Annule les modifications effectuées après leSAVEPOINT
spécifié.RELEASE SAVEPOINT
: Libère un savepoint.
Exemple avec SAVEPOINT
:
6.1.6 Gestion des erreurs dans les transactions
Les transactions peuvent être sujettes à des erreurs en raison de contraintes (ex. contrainte de clé étrangère, contrainte unique) ou de pannes. Il est donc important de gérer ces erreurs proprement.
Voici quelques conseils :
Vérification d'erreurs après chaque requête : Si vous développez des scripts SQL ou des programmes utilisant des transactions, assurez-vous de capturer et gérer les erreurs après chaque instruction SQL.
Utilisation de
ROLLBACK
en cas d'erreur : Si une erreur survient, utiliserROLLBACK
permet de garantir que les modifications partielles ne soient pas appliquées.
Exemple de gestion d'erreur :
Last updated