Aké úrovne izolácie transakcií v databázach poznáš?
sobes.tech AI
Odpoveď od AI
V štandardnej SQL sú definované štyri úrovne izolácie transakcií: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: Najnižšia úroveň. Transakcia môže čítať údaje, ktoré ešte neboli potvrdené (t.j. vykonané inou transakciou, ktorá ešte nebola ukončená
COMMIT). To vedie k "špinavým" čítaniam (dirty reads). -
Read Committed: Transakcia vidí iba údaje, ktoré boli potvrdené pred začiatkom alebo počas jej vykonávania. Zabraňuje "špinavým" čítaniam, ale umožňuje neustále čítania (non-repeatable reads) a fenomény (phantom reads).
- Neustále čítania: To isté čítanie v rámci jednej transakcie vráti odlišné údaje, pretože iná transakcia medzičasom zmenila a potvrdila ich.
- Fantomové čítania: Pri vykonávaní dotazu s podmienkou
WHEREdruhá transakcia pridá alebo odstráni riadky, ktoré zodpovedajú podmienke, a opakovanie toho istého dotazu v rámci prvej transakcie vráti odlišný súbor riadkov.
-
Repeatable Read: Transakcia vidí iba údaje, ktoré boli potvrdené pred jej začiatkom. Zaručuje, že opakované čítania tých istých riadkov v rámci jednej transakcie vráti rovnaké údaje. Zabraňuje "špinavým" a neustále čítaniam. Umožňuje fenomény.
// Príklad Repeatable Read // Transakcia 1 // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Napríklad, 100 // Transakcia 2 (beží súčasne) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Nový používateľ', 'active'); // COMMIT; // Transakcia 1 // SELECT COUNT(*) FROM users WHERE status = 'active'; // Ešte stále 100 (fenomén) // COMMIT; -
Serializable: Najvyššia úroveň izolácie. Zaručuje, že paralelné vykonávanie transakcií bude ekvivalentné určitým sekvenčným vykonávaniam týchto transakcií. Zabraňuje "špinavým" čítaniam, neustále čítaniam a fenoménom. Môže viesť k zníženiu výkonu kvôli blokovaniu.
V rôznych systémoch správy databáz môžu byť svoje implementácie a špecifiká úrovní izolácie, ako aj ďalšie úrovne. Napríklad v MySQL InnoDB je predvolená úroveň Repeatable Read.