Junior — Middle
Pourriez-vous expliquer ce qu'on entend par lecture fantôme dans le contexte des transactions et des bases de données?
sobes.tech IA
Réponse de l'IA
La lecture fantôme est une situation dans les transactions où, lors de la réexécution de la même requête dans une transaction, de nouvelles lignes apparaissent qui n’étaient pas visibles lors de la première lecture.
Exemple :
- La transaction T1 exécute la requête
SELECT * FROM orders WHERE status = 'new'et obtient 5 enregistrements. - Pendant que T1 n’est pas terminée, une autre transaction T2 ajoute un nouvel enregistrement avec
status = 'new'et valide les changements. - Si T1 répète la même requête, elle verra déjà 6 enregistrements — la nouvelle ligne apparaissant comme un "fantôme".
La lecture fantôme se produit parce que la plage de lignes correspondant à la condition de la requête a changé entre les deux lectures.
Pour éviter la lecture fantôme, on utilise le niveau d’isolation SERIALIZABLE, qui bloque les plages de données, empêchant l’apparition de nouvelles lignes entre les lectures. Aux niveaux READ COMMITTED ou REPEATABLE READ, des fantômes peuvent apparaître.