Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jaka jest różnica między odczytem niepowtarzalnym a odczytem fantomowym?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lipiec 2016 Zasilacz nie robi isqora

  2. Jak zweryfikować adres e-mail za pomocą PL/SQL?

  3. Jak uzyskać skrypt tabeli w Oracle SQL Developer?

  4. Zmień rozmiar nazw tabel/kolumn/indeksów w Oracle 11g lub 12c

  5. Jak znaleźć zależności w pakiecie Oracle?