Jakie poziomy izolacji transakcji w bazach danych znasz?
sobes.tech AI
Odpowiedź od AI
W standardzie SQL zdefiniowano cztery poziomy izolacji transakcji: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Najniższy poziom. Transakcja może czytać dane, które jeszcze nie zostały zatwierdzone (czyli wykonane przez inną transakcję, która jeszcze nie zakończyła się
COMMIT). Prowadzi to do "brudnych" odczytów (dirty reads). -
Read Committed: Transakcja widzi tylko dane, które zostały zatwierdzone przed lub w trakcie jej wykonania. Zapobiega "brudnym" odczytom, ale pozwala na odczyty niepowtarzalne (non-repeatable reads) i odczyty fantomowe (phantom reads).
- Odczyty niepowtarzalne: Ten sam odczyt w ramach jednej transakcji może zwrócić różne dane, ponieważ inna transakcja je zmieniła i zatwierdziła.
- Odczyty fantomowe: Podczas wykonywania zapytania z warunkiem
WHERE, inna transakcja dodaje lub usuwa wiersze spełniające warunek, a ponowne wykonanie tego samego zapytania w ramach pierwszej transakcji zwraca inny zestaw wierszy.
-
Repeatable Read: Transakcja widzi tylko dane, które zostały zatwierdzone przed jej rozpoczęciem. Gwarantuje, że powtarzające się odczyty tych samych wierszy w ramach jednej transakcji zwrócą te same dane. Zapobiega "brudnym" i odczytom niepowtarzalnym. Pozwala na odczyty fantomowe.
// Przykład Repeatable Read // Transakcja 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Na przykład, 100 // Transakcja 2 (wykonywana równocześnie) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Nowy użytkownik', 'active'); // COMMIT; // Transakcja 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Nadal 100 (fantom) // COMMIT; -
Serializable: Najwyższy poziom izolacji. Gwarantuje, że równoległe wykonywanie transakcji będzie równoważne pewnemu ich wykonaniu sekwencyjnemu. Zapobiega "brudnym" odczytom, odczytom niepowtarzalnym i odczytom fantomowym. Może obniżać wydajność z powodu blokad.
W różnych systemach zarządzania bazami danych (DBMS) mogą istnieć własne implementacje i cechy poziomów izolacji, a także dodatkowe poziomy. Na przykład w MySQL InnoDB domyślnym poziomem jest Repeatable Read.