Bases des bases de données
La transaction T1 a exécuté SELECT COUNT(*) FROM Commande WHERE Montant >= 1000 et a obtenu 8. Juste après, T2 a inséré une ligne de commande d'un montant de 2000 et l'a validée. Lorsque T1 a exécuté de nouveau la même instruction SELECT, elle a obtenu 9. De quel phénomène s'agit-il ?
- ALecture non répétable
- BLecture sale
- CLecture fantôme
Afficher la réponse et l'explication
Réponse : C. Lecture fantôme
Lorsqu'une recherche avec la même condition est répétée dans une transaction et que l'ensemble des lignes du résultat change parce qu'une autre transaction a ajouté (ou supprimé) des lignes satisfaisant la condition et les a validées entre-temps, on parle de lecture fantôme (phantom read, ou fantôme). Le nom vient de ce que les lignes nouvellement apparues sont comme des fantômes. Une lecture non répétable se produit lorsqu'une ligne déjà lue a une valeur différente (ou a disparu) à la relecture, parce qu'une autre transaction l'a modifiée par UPDATE ou supprimée par DELETE et a validé. Des verrous sur les lignes existantes ne peuvent pas empêcher l'ajout de lignes qui n'existent pas encore ; éviter les fantômes demande donc des mécanismes comme le verrouillage de la plage couverte par la condition de recherche. Selon la norme SQL, les fantômes ne se produisent pas au niveau d'isolation SERIALIZABLE. T2 a validé ; il ne s'agit donc pas d'une lecture sale.
Continuer : 9 autres questions sur Bases des bases de données