Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, na czym polega zjawisko czytania phantomowego w kontekście transakcji?

sobes.tech AI

Odpowiedź od AI

Zjawisko phantom reads występuje w kontekście transakcji baz danych, gdy w ramach jednej transakcji powtarzające się zapytanie do danych zwraca różne wyniki z powodu dodania lub usunięcia wierszy spełniających warunek wyboru przez inną transakcję.

Na przykład, jeśli w pierwszej części transakcji wybraliśmy wszystkie rekordy z określonym warunkiem, a następnie w drugiej części powtórzyliśmy to samo zapytanie, mogą pojawić się nowe wiersze (phantomy), które nie były widoczne podczas pierwszego odczytu z powodu równoległych zmian w bazie.

To jest związane z poziomem izolacji transakcji: phantom reads są możliwe na poziomie READ COMMITTED, ale są zapobiegane na poziomie SERIALIZABLE.

Przykład:

-- Transakcja 1
BEGIN;
SELECT * FROM orders WHERE status = 'pending'; -- zwróciło 5 rekordów
-- Transakcja 2 równolegle dodaje nowy rekord z status = 'pending'
SELECT * FROM orders WHERE status = 'pending'; -- teraz zwróci 6 rekordów
COMMIT;