Milyen tranzakció elszigeteltségi szinteket ismersz az adatbázisokban?
sobes.tech MI
Válasz az MI-től
Az SQL szabvány négy tranzakciózási szintet határoz meg: Read Uncommitted, Read Committed, Repeatable Read, Serializable.
-
Read Uncommitted: A legalacsonyabb szint. Egy tranzakció olvashat olyan adatokat, amelyek még nem kerültek megerősítésre (azaz, másik tranzakció által végrehajtott, de még nem
COMMIT-olt adatokat). Ez "piszkos" olvasásokhoz (dirty reads) vezet. -
Read Committed: A tranzakció csak azokat az adatokat látja, amelyek a tranzakció kezdete előtt vagy közben lettek megerősítve. Megakadályozza a "piszkos" olvasásokat, de lehetővé teszi a nem ismétlődő olvasásokat (non-repeatable reads) és a fantom olvasásokat (phantom reads).
- Nem ismétlődő olvasások: Ugyanaz az olvasás egy tranzakción belül más eredményt adhat, mert egy másik tranzakció megváltoztatta és megerősítette az adatokat.
- Fantomok: Egy
WHEREfeltétellel végrehajtott lekérdezés során egy másik tranzakció hozzáad vagy eltávolít sorokat, amelyek megfelelnek a feltételnek, és ugyanaz a lekérdezés újra végrehajtva a tranzakción belül más eredményt ad.
-
Repeatable Read: A tranzakció csak azokat az adatokat látja, amelyek a tranzakció kezdete előtt lettek megerősítve. Garantálja, hogy ugyanazokat a sorokat többször olvasva ugyanazokat az adatokat kapjuk. Megakadályozza a "piszkos" és nem ismétlődő olvasásokat. Engedélyezi a fantomokat.
// Repeatable Read példa // 1. tranzakció // BEGIN TRANSACTION; // SELECT COUNT(*) FROM users WHERE status = 'active'; // Például, 100 // 2. tranzakció (egyszerre fut) // BEGIN TRANSACTION; // INSERT INTO users (name, status) VALUES ('Új felhasználó', 'active'); // COMMIT; // 1. tranzakció // SELECT COUNT(*) FROM users WHERE status = 'active'; // Még mindig 100 (fantom) // COMMIT; -
Serializable: A legmagasabb izolációs szint. Biztosítja, hogy a tranzakciók párhuzamos végrehajtása egy bizonyos szekvenciális végrehajtásnak feleljen meg. Megakadályozza a "piszkos" olvasásokat, nem ismétlődő olvasásokat és fantomokat. A zárolások miatt a teljesítmény csökkenhet.
Különböző DBMS-ekben saját implementációk és jellemzők lehetnek az izolációs szintekhez, valamint további szintek is. Például a MySQL InnoDB alapértelmezett szintje a Repeatable Read.