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 ?

  1. ALecture non répétable
  2. BLecture sale
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. Parmi les niveaux d'isolation définis par la norme SQL, quelle combinaison indique correctement les phénomènes qui peuvent se produire avec READ COMMITTED ?
  2. La transaction T1 détient un verrou partagé sur une ligne et la lit. Sur la même ligne, T2 demande un verrou partagé et T3 un verrou exclusif. Quelle affirmation est correcte pour la période qui précède la libération du verrou par T1 ?
  3. Quelle proposition décrit correctement le verrouillage à deux phases (2PL), utilisé pour le contrôle de concurrence des transactions ?
  4. La transaction T1 a posé un verrou exclusif sur la ligne A puis demandé un verrou sur la ligne B, tandis que T2 a posé un verrou exclusif sur la ligne B puis demandé un verrou sur la ligne A ; aucune ne peut donc progresser. Que fait généralement un SGBD lorsqu'il détecte cette situation ?
  5. Lors de la mise à jour des données, de nombreux SGBD enregistrent les modifications dans un journal (log) et écrivent ce journal sur un support de stockage non volatil avant la base de données elle-même (WAL : journalisation à écriture anticipée, write-ahead logging). Quelle est la principale raison de cette approche ?