Sobes.tech
Junior — Middle

Czy mógłbyś wyjaśnić, co oznacza phantom read w kontekście transakcji i baz danych?

sobes.tech AI

Odpowiedź od AI

Czytanie fantomowe to sytuacja w transakcjach, gdy podczas ponownego wykonania tego samego zapytania w ramach jednej transakcji pojawiają się nowe wiersze, które nie były widoczne podczas pierwszego odczytu.

Przykład:

  1. Transakcja T1 wykonuje zapytanie SELECT * FROM orders WHERE status = 'new' i otrzymuje 5 rekordów.
  2. Podczas gdy T1 nie zakończyła się, inna transakcja T2 dodaje nowy rekord z status = 'new' i zatwierdza zmiany.
  3. Jeśli T1 powtórzy to samo zapytanie, zobaczy już 6 rekordów — nowy wiersz pojawił się jako "fantom".

Czytanie fantomowe występuje, ponieważ zakres wierszy spełniających warunek zapytania zmienił się między dwoma odczytami.

Aby uniknąć czytania fantomowego, używa się poziomu izolacji SERIALIZABLE, który blokuje zakresy danych, zapobiegając pojawianiu się nowych wierszy między odczytami. Na poziomach READ COMMITTED lub REPEATABLE READ mogą wystąpić fantomy.