Koje nivoe izolacije transakcija u bazama podataka poznaješ?
sobes.tech АИ
Одговор од АИ
U SQL standardu definisana su četiri nivoa izolacije transakcija: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Najniži nivo. Transakcija može da čita podatke koji još nisu potvrđeni (tj. izvršeni od strane druge transakcije koja još nije završila sa
COMMIT). To dovodi do "prljavih" čitanja (dirty reads). -
Read Committed: Transakcija vidi samo podatke koji su potvrđeni pre ili tokom njenog izvršenja. Sprečava "prljava" čitanja, ali dozvoljava neponovljiva čitanja (non-repeatable reads) i fantome (phantom reads).
- Neponovljiva čitanja: Isto čitanje unutar jedne transakcije može vratiti različite podatke, jer je druga transakcija promenila i potvrdila te podatke.
- Fantom čitanja: Pri izvršenju upita sa uslovom
WHERE, druga transakcija dodaje ili briše redove koji zadovoljavaju uslov, a ponovnim izvršenjem istog upita unutar prve transakcije dobijaju se drugi skupovi redova.
-
Repeatable Read: Transakcija vidi samo podatke koji su potvrđeni pre njenog početka. Garantuje da će ponovljena čitanja istih redova unutar jedne transakcije vratiti iste podatke. Sprečava "prljava" i neponovljiva čitanja. Dozvoljava fantome.
// Primer Repeatable Read // Transakcija 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Na primer, 100 // Transakcija 2 (istovremeno) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Novi korisnik', 'active'); // COMMIT; // Transakcija 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Još uvek 100 (fantom) // COMMIT; -
Serializable: Najviši nivo izolacije. Garantuje da će paralelno izvršavanje transakcija biti ekvivalentno nekom sekvencijalnom izvršavanju tih transakcija. Sprečava "prljava" čitanja, neponovljiva čitanja i fantome. Može dovesti do smanjenja performansi zbog zaključavanja.
U različitim DBMS-ovima mogu postojati sopstvene implementacije i karakteristike nivoa izolacije, kao i dodatni nivoi. Na primer, u MySQL InnoDB, podrazumevani nivo je Repeatable Read.