Atomicité et isolation des transactions
Les transactions dans MySQL respectent les propriétés ACID, qui garantissent la fiabilité des transactions même en cas de panne ou d'échec. Les deux aspects fondamentaux des transactions dans ce contexte sont l'atomicité et l'isolation.
6.2.1 Atomicité
L'atomicité garantit que toutes les opérations d'une transaction soient exécutées ou qu'aucune ne le soit. Si une partie d'une transaction échoue, aucune des modifications effectuées avant l'erreur ne doit être appliquée à la base de données.
Exemple d'atomicité :
Supposons que nous transférons 500 € d'un compte à un autre. Si une des étapes échoue, la transaction doit être annulée.
Dans cet exemple, l'atomicité garantit que l'argent ne sera retiré du premier compte que s'il est correctement ajouté au second.
6.2.2 Isolation
L'isolation assure que les modifications effectuées dans une transaction ne sont pas visibles par d'autres transactions tant que la transaction en cours n'est pas validée (COMMIT
). Cela empêche les transactions simultanées d'accéder à des données partielles ou non validées.
Il existe plusieurs niveaux d'isolation dans MySQL :
READ UNCOMMITTED : Les transactions peuvent voir les modifications non validées d'autres transactions.
READ COMMITTED : Les transactions ne peuvent voir que les modifications validées.
REPEATABLE READ : Une transaction voit toujours les mêmes données, même si d'autres transactions les modifient entre-temps.
SERIALIZABLE : Le niveau le plus strict ; les transactions sont exécutées de manière séquentielle pour éviter toute interaction.
Exemple d'utilisation du niveau d'isolation :
Pour définir le niveau d'isolation d'une transaction, vous pouvez utiliser la commande suivante :
Comparaison des niveaux d'isolation :
READ UNCOMMITTED : Risque élevé de lire des données non validées (phénomène de lecture sale).
READ COMMITTED : Évite la lecture de données non validées, mais peut permettre la lecture de modifications effectuées par une autre transaction après le début de la transaction courante (lecture non répétable).
REPEATABLE READ : Évite les lectures non répétables, mais permet des anomalies comme le phantom read (insertion de nouvelles lignes visibles lors de la relecture).
SERIALIZABLE : Évite toutes les anomalies de lecture, mais peut ralentir les performances en bloquant les transactions concurrentes.
Last updated