Les transactions garantissent ACID. L’isolation definit ce qu’une transaction voit du travail des autres transactions concurrentes.
Les anomalies de concurrence
Dirty read : lire des donnees non commitees. Non-repeatable read : lire la meme ligne deux fois et obtenir des valeurs differentes. Phantom read : une requete sur une plage retourne des lignes differentes entre deux lectures.
Niveaux d’isolation PostgreSQL
| Niveau | Dirty Read | Non-repeatable | Phantom |
|---|---|---|---|
| Read Committed | Impossible | Possible | Possible |
| Repeatable Read | Impossible | Impossible | Impossible |
| Serializable | Impossible | Impossible | Impossible |
Demonstration : le probleme de l’inventaire
-- Transaction 1 (Read Committed par defaut)
BEGIN;
SELECT stock FROM products WHERE id = 1; -- Retourne : 1
-- Transaction 2 commite et decrement stock a 0
SELECT stock FROM products WHERE id = 1; -- Retourne : 0 (non-repeatable read)
COMMIT;
Avec Repeatable Read :
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT stock FROM products WHERE id = 1; -- Retourne : 1
-- Transaction 2 commite -- IGNORE
SELECT stock FROM products WHERE id = 1; -- Retourne toujours : 1
COMMIT;
Choisir le bon niveau
# Pour les operations financieres
with engine.connect() as conn:
conn.execute(text("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"))
# ... operations
conn.commit()
Notre formation SQL couvre les transactions avancees avec des exercices pratiques.