Baza danych z izolacją Read_Uncommitted

0

Czy na bazie danych z izolacją Read_Uncommitted będzie działało wycofywanie transakcji (rollback) ?
Czyli po wykonaniu rollbacku czy baza wróci do stanu sprzed transakcji?

0

Tak transakcje działają zawsze tak samo, bez względu na poziom izolacji. Poziom izolacji wpływa tylko i wyłącznie na to czy i w jaki sposób w transakcji widzisz zmiany nie commitowane przez inne transakcje.

0

Dzięki.
A jeżeli dla danej niecommittowanych transakcji tą docelową bazę danych przegląda jakaś inna aplikacja ale nie w trybie transakcji (jeżeli w ogóle można pobierać dane w trybie nietransakcyjnym?) to tych niecommittowanych danych nie zobaczy?
Czy baza danych (MySQL, PostgreSQL, MsSQL) wymusza aby wszystkie pojedyncze pobrania danych oraz updaty były pojedynczymi transakcjami ?

0

pobranie (select) wcale nie musi być w transakcji. Natomiast w bazach transakcyjnych każda zmiana jest obejmowana transakcją (nawet jeśli nie jest jawnie rozpoczęta przez usera). Co do wymusza aby wszystkie pojedyncze updaty były pojedynczymi transakcjami to przeczy to istocie transakcyjności i nie spotkałem się z takim zachowaniem

1
TomiBomi napisał(a)

A jeżeli dla danej niecommittowanych transakcji tą docelową bazę danych przegląda jakaś inna aplikacja ale nie w trybie transakcji (jeżeli w ogóle można pobierać dane w trybie nietransakcyjnym?) to tych niecommittowanych danych nie zobaczy?

Zobaczy, dlaczego miałby nie zobaczyć jeżeli masz ustawiony poziom izolacji READ UNCOMMITTED?

TomiBomi napisał(a)

Czy baza danych (MySQL, PostgreSQL, MsSQL) wymusza aby wszystkie pojedyncze pobrania danych oraz updaty były pojedynczymi transakcjami ?

W każdej bazie danych, a nawet w każdym silniku (MySQL ma np. silniki InnoDB i MyISAM oraz inne) kontrola współbieżności wygląda inaczej. MySQL działa w trybie AUTOCOMMIT, więc każde zapytanie jest wykonywane jako oddzielna transakcja. Tzn. jak wykonasz na bazie update to baza na początku przejdzie do transakcji, a po zakończeniu UPDATE-towania wyjdzie z transakcji. Można to wyłączyć poleceniem SET AUTOCOMMIT = 0; wtedy będziemy cały czas w transakcji aż do chwili wywołania polecenia COMMIT lub ROLLBACK. Po wywołaniu jednego z tych poleceń rozpocznie się kolejna transakcja.

0

Dzięki za odpowiedź. : )

1 użytkowników online, w tym zalogowanych: 0, gości: 1