Z this oracle poradniku JAVA:Różnica jednorazowych odczytu vs brudny odczytu
Non powtarzalny odczytu zachodzi podczas transakcji a odczytuje wiersz, transakcji B następnie aktualizuje wiersz, a transakcja Późniejsza ponownie pobiera ten sam wiersz. Transakcja A powoduje dwukrotne pobranie tego samego wiersza , ale widzi inne dane.
Jaka jest różnica między brudnym czytaniem a nieodczytywalnym odczytem? Czy to nie to samo? Czytanie błędnego wyniku z powodu aktualizacji innych osób?
Z góry dziękuję.
Jak to może być możliwe? Chodzi mi o to, że po zakończeniu transakcji jedynym sposobem na uniknięcie nie powtarzalnych odczytów jest utrzymanie blokady nawet po popełnieniu ... W każdym razie prędzej czy później nastąpi inne połączenie (B) i jak to się stanie, aby zapobiec aktualizacji tego wiersz wcześniej pobrany przez A – Rollerball
A może tylko 1 połączenie na czas może pisać w DBMS. Dopóki istnieje aktywne połączenie z DBMS, żadne inne połączenie nie może faktycznie zaktualizować DB dla tych konkretnych wierszy (dopóki pierwsze połączenie nie zostanie zamknięte) Czy mam rację? – Rollerball
Powtarzalny odczyt jest gwarantowany tylko na czas trwania transakcji: rozpoczyna się transakcja T1, odczytuje A1, następnie inna transakcja T2 modyfikuje A1 na A2 i zatwierdza, wtedy pierwsza transakcja T1 ponownie odczytuje wartość i nadal odczytuje A1 . To jest powtarzalne czytanie. Oczywiście kolejna transakcja T3, która odczytuje wartość po raz pierwszy po zatwierdzeniu T2, odczyta zatwierdzoną wartość, A2. Aby dowiedzieć się, w jaki sposób jest ona zaimplementowana w bazie danych, przeczytaj jego dokumentację. Większość z nich używa [MVCC] (http://en.wikipedia.org/wiki/Multiversion_concurrency_control), AFAIK. –