Sobes.tech
Junior — Middle

Kunt u uitleggen wat Phantom read betekent in de context van transacties en databases?

sobes.tech AI

Antwoord van AI

Fantomlezen — dit is een situatie in transacties waarbij, bij het herhaald uitvoeren van dezelfde query binnen één transactie, nieuwe rijen verschijnen die bij de eerste lezing niet zichtbaar waren.

Voorbeeld:

  1. Transactie T1 voert de query SELECT * FROM orders WHERE status = 'new' uit en krijgt 5 records.
  2. Terwijl T1 nog niet is voltooid, voegt een andere transactie T2 een nieuw record toe met status = 'new' en commit de wijzigingen.
  3. Als T1 dezelfde query herhaalt, ziet ze al 6 records — de nieuwe rij die als "fantoom" verschijnt.

Fantomlezen gebeurt omdat het bereik van rijen dat aan de query-voorwaarde voldoet, tussen de twee lezingen is veranderd.

Om fantoomlezen te voorkomen, wordt het isolatieniveau SERIALIZABLE gebruikt, dat dataranges blokkeert en het verschijnen van nieuwe rijen tussen de lezingen voorkomt. Bij de niveaus READ COMMITTED of REPEATABLE READ kunnen fantasomen voorkomen.