FiabilitéReliability · 29 juillet 2026 · 9 min de lecture· July 29, 2026 · 9 min read

Les transactions SQL et les propriétés ACID, expliquées avec des exemples

SQL Transactions and ACID Properties, Explained with Examples

Une transaction regroupe plusieurs opérations SQL en une seule unité indivisible : soit toutes les opérations réussissent, soit aucune n'est appliquée. C'est essentiel dès qu'une opération métier touche plusieurs tables — comme un virement bancaire.

A transaction groups several SQL operations into a single, indivisible unit: either all operations succeed, or none are applied. This is essential whenever a business operation touches multiple tables — like a bank transfer.

BEGIN, COMMIT, ROLLBACK

BEGIN, COMMIT, ROLLBACK

BEGIN;

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
UPDATE comptes SET solde = solde + 100 WHERE id = 2;

COMMIT;
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

COMMIT;

Si une erreur survient entre les deux UPDATE (panne, contrainte violée, etc.), on peut annuler l'ensemble avec ROLLBACK plutôt que COMMIT, et le solde des deux comptes reste inchangé.

If an error occurs between the two UPDATEs (outage, violated constraint, etc.), you can undo everything with ROLLBACK instead of COMMIT, and both account balances remain unchanged.

BEGIN;

UPDATE comptes SET solde = solde - 100 WHERE id = 1;
-- une erreur est détectée ici
ROLLBACK;
-- aucun changement n'est appliqué
BEGIN;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- an error is detected here
ROLLBACK;
-- no changes are applied

Les propriétés ACID

The ACID Properties

PropriétéSignification
AtomicitéToutes les opérations d'une transaction réussissent ensemble, ou aucune n'est appliquée
CohérenceLa base passe d'un état valide à un autre état valide, en respectant toutes les contraintes
IsolationDeux transactions concurrentes ne se perturbent pas l'une l'autre
DurabilitéUne fois validée (COMMIT), la transaction survit même à une panne du serveur
PropertyMeaning
AtomicityAll operations in a transaction succeed together, or none are applied
ConsistencyThe database moves from one valid state to another valid state, respecting all constraints
IsolationTwo concurrent transactions don't interfere with each other
DurabilityOnce committed (COMMIT), the transaction survives even a server crash

Pourquoi l'isolation est délicate

Why Isolation Is Tricky

Quand plusieurs transactions s'exécutent en même temps, plusieurs problèmes peuvent survenir sans un niveau d'isolation adéquat :

When multiple transactions run at the same time, several problems can occur without an adequate isolation level:

  • Lecture sale (dirty read) : lire des données modifiées par une transaction non encore validée
  • Lecture non répétable : relire la même ligne deux fois dans une transaction et obtenir des valeurs différentes
  • Lecture fantôme (phantom read) : une même requête renvoie un nombre de lignes différent à deux moments de la même transaction
  • Dirty read: reading data modified by a transaction that hasn't been committed yet
  • Non-repeatable read: reading the same row twice within a transaction and getting different values
  • Phantom read: the same query returns a different number of rows at two points within the same transaction

Les niveaux d'isolation standards

The Standard Isolation Levels

NiveauProtège contre
READ UNCOMMITTEDRien (le plus permissif)
READ COMMITTEDLectures sales
REPEATABLE READLectures sales + lectures non répétables
SERIALIZABLETous les problèmes ci-dessus (le plus strict)
LevelProtects Against
READ UNCOMMITTEDNothing (most permissive)
READ COMMITTEDDirty reads
REPEATABLE READDirty reads + non-repeatable reads
SERIALIZABLEAll of the above (strictest)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
-- opérations sensibles à la concurrence
COMMIT;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
-- concurrency-sensitive operations
COMMIT;
Astuce : un niveau d'isolation plus strict réduit les anomalies mais augmente les risques de blocages (locks) et peut ralentir votre application. Choisissez le niveau le plus permissif qui reste suffisant pour votre cas d'usage. Tip: a stricter isolation level reduces anomalies but increases the risk of locking and can slow down your application. Choose the most permissive level that's still sufficient for your use case.

Points clés à retenir

Key Takeaways

  • Enveloppez toujours les opérations liées (ex. transfert d'argent) dans une transaction explicite
  • Gardez les transactions courtes pour limiter les verrous et les conflits
  • Testez votre code applicatif avec des ROLLBACK volontaires pour vérifier qu'aucune donnée partielle n'est écrite
  • Always wrap related operations (e.g., a money transfer) in an explicit transaction
  • Keep transactions short to limit locks and conflicts
  • Test your application code with deliberate ROLLBACKs to confirm no partial data gets written
← Article précédent : GROUP BY et HAVING ← Previous article: GROUP BY and HAVING Retour à l'accueil → Back to Home →
Publicité Advertisement