Quels niveaux d'isolation des transactions dans les bases de données connais-tu?
sobes.tech IA
Réponse de l'IA
Le standard SQL définit quatre niveaux d’isolation des transactions : Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted : Le niveau le plus bas. La transaction peut lire des données qui n’ont pas encore été validées (c’est-à-dire effectuées par une autre transaction qui n’a pas encore terminé avec
COMMIT). Cela conduit à des lectures "sales" (dirty reads). -
Read Committed : La transaction ne voit que les données qui ont été validées avant ou pendant son exécution. Empêche les "lectures sales", mais permet les lectures non répétables (non-repeatable reads) et les fantômes (phantom reads).
- Lectures non répétables : La même lecture dans une transaction peut retourner des données différentes parce qu’une autre transaction les a modifiées et validées entre-temps.
- Fantômes : Lorsqu’une requête avec une condition
WHEREest exécutée, une autre transaction ajoute ou supprime des lignes correspondant à la condition, et la même requête exécutée à nouveau dans la même transaction retourne un ensemble différent de lignes.
-
Repeatable Read : La transaction ne voit que les données qui ont été validées avant son début. Garantit que les mêmes lectures des mêmes lignes dans une transaction renverront les mêmes données. Empêche les "lectures sales" et non répétables. Permet les fantômes.
// Exemple de Repeatable Read // Transaction 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Par exemple, 100 // Transaction 2 (exécutée simultanément) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Nouvel utilisateur', 'active'); // COMMIT; // Transaction 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Toujours 100 (fantôme) // COMMIT; -
Serializable : Le niveau d’isolation le plus élevé. Garantit que l’exécution parallèle des transactions sera équivalente à une exécution séquentielle de ces transactions. Empêche les lectures "sales", non répétables et les fantômes. Peut réduire la performance en raison des verrouillages.
Dans différents SGBD, il peut y avoir des implémentations et des caractéristiques propres aux niveaux d’isolation, ainsi que des niveaux supplémentaires. Par exemple, dans MySQL InnoDB, le niveau par défaut est Repeatable Read.