Sobes.tech
Middle

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.

  1. 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.

  2. 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 WHERE felté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.
  3. 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;
    
  4. 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.