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:
- Transactie T1 voert de query
SELECT * FROM orders WHERE status = 'new'uit en krijgt 5 records. - Terwijl T1 nog niet is voltooid, voegt een andere transactie T2 een nieuw record toe met
status = 'new'en commit de wijzigingen. - 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.