Sobes.tech
Middle

Milliseid andmebaaside transaktsioonide isoleerimise tasemeid tead?

sobes.tech AI

Vastus AI-lt

SQL standardis on määratletud neli transaktsiooniisolatsiooni taset: Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  1. Read Uncommitted: Madalaim tase. Transaktsioon võib lugeda andmeid, mis pole veel kinnitatud (st. tehtud teise transaktsiooni poolt, mis pole veel lõpetatud COMMIT). See viib "mustade" lugemiste (dirty reads).

  2. Read Committed: Transaktsioon näeb ainult neid andmeid, mis on kinnitatud enne selle algust või selle ajal. Takistab "mustade" lugemiste, kuid lubab mitte-korduvad lugemised (non-repeatable reads) ja vaimud (phantom reads).

    • Mitte-korduvad lugemised: Sama lugemine ühe transaktsiooni jooksul tagastab erinevad andmed, kuna teine transaktsioon on vahepeal muutnud ja kinnitanud need.
    • Vaimud: Kui päring WHERE tingimusega käivitatakse, lisab teine transaktsioon vastavad read või kustutab need ning sama päringu korduv käivitamine annab teistsuguse tulemuse.
  3. Repeatable Read: Transaktsioon näeb ainult neid andmeid, mis on kinnitatud enne selle algust. Tagab, et sama read lugemine ühe transaktsiooni jooksul annab alati samad andmed. Takistab "musti" ja mitte-korduvaid lugemisi. Lubab vaimud.

    // Repeatable Read näide
    // Transaktsioon 1
    // BEGIN TRANSACTION;
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Näiteks 100
    
    // Transaktsioon 2 (samal ajal)
    // BEGIN TRANSACTION;
    // INSERT INTO users (name, status) VALUES ('Uus kasutaja', 'active');
    // COMMIT;
    
    // Transaktsioon 1
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Endiselt 100 (vaim)
    // COMMIT;
    
  4. Serializable: Kõrgeim tase. Tagab, et paralleelselt täidetavad transaktsioonid on ekvivalentsed mingi nende järjestikusele täitmisele. Takistab "mustade" lugemiste, mitte-korduvate lugemiste ja vaimude tekkimist. Võib põhjustada jõudluse langust lukustuste tõttu.

Erinevates andmebaasisüsteemides võivad olla oma teostused ja omadused, samuti täiendavad tasemed. Näiteks MySQL InnoDB kasutab vaikimisi Repeatable Read taset.