Basis van databases
Welke beschrijving van een dirty read, een van de problemen die optreden als transacties gelijktijdig lopen, is juist?
- AEen transactie leest een wijziging die een andere transactie nog niet heeft gecommit, en omdat die transactie daarna een rollback uitvoert, gebruikt ze uiteindelijk een waarde die nooit heeft bestaan
- BWordt binnen één transactie dezelfde rij twee keer gelezen, dan geeft dat een andere waarde, omdat een andere transactie de rij tussendoor heeft gewijzigd en gecommit
- CWordt een zoekopdracht met dezelfde voorwaarde twee keer uitgevoerd, dan geeft dat een ander aantal rijen, omdat een andere transactie tussendoor een rij heeft toegevoegd en gecommit
Antwoord en toelichting tonen
Antwoord: A. Een transactie leest een wijziging die een andere transactie nog niet heeft gecommit, en omdat die transactie daarna een rollback uitvoert, gebruikt ze uiteindelijk een waarde die nooit heeft bestaan
Een dirty read is het probleem dat niet-gecommitte (nog niet definitieve) gegevens worden gelezen. Als de transactie die de wijziging heeft gemaakt later een rollback uitvoert, is de gelezen waarde nooit definitief geworden, en elke verwerking die erop is gebaseerd, is fout. Merken dat dezelfde rij bij twee keer lezen een andere waarde heeft, is een non-repeatable read, en merken dat het aantal rijen dat aan een zoekvoorwaarde voldoet is toe- of afgenomen, is een phantom read. Deze problemen ontstaan als de isolatie van transacties onvoldoende is, en in SQL kies je door het isolatieniveau in te stellen hoeveel ervan worden voorkomen. Bij isolatieniveaus vanaf READ COMMITTED treden dirty reads niet op.