Z Wikipedii (która zawiera świetne i szczegółowe przykłady):
Niepowtarzalny odczyt ma miejsce, gdy w trakcie transakcji wiersz jest pobierany dwukrotnie, a wartości w wierszu różnią się między odczytami.
i
Odczyt fantomowy ma miejsce, gdy w trakcie transakcji wykonywane są dwa identyczne zapytania, a kolekcja wierszy zwracanych przez drugie zapytanie różni się od pierwszego.
Proste przykłady:
- Użytkownik A dwukrotnie uruchamia to samo zapytanie.
- W międzyczasie Użytkownik B uruchamia transakcję i zatwierdza.
- Niepowtarzalny odczyt:wiersz A, o który pytał użytkownik A, ma inną wartość za drugim razem.
- Odczyt widmowy:wszystkie wiersze w zapytaniu mają tę samą wartość przed i po, ale wybierane są różne wiersze (ponieważ B usunął lub wstawił niektóre). Przykład:
select sum(x) from table;
zwróci inny wynik, nawet jeśli żaden z wierszy, których dotyczy problem, nie został zaktualizowany, jeśli wiersze zostały dodane lub usunięte.
W powyższym przykładzie, jakiego poziomu izolacji użyć?
Potrzebny poziom izolacji zależy od aplikacji. „Lepszy” poziom izolacji wiąże się z wysokimi kosztami (np. zmniejszona współbieżność).
W twoim przykładzie nie będziesz mieć odczytu fantomowego, ponieważ wybierasz tylko z jednego wiersza (identyfikowanego przez klucz podstawowy). Możesz mieć niepowtarzalne odczyty, więc jeśli jest to problem, możesz chcieć mieć poziom izolacji, który temu zapobiega. W Oracle transakcja A może również wydać polecenie WYBIERZ DO AKTUALIZACJI, a transakcja B nie może zmienić wiersza, dopóki A nie zostanie zakończone.