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.
-
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). -
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
WHEREtingimusega käivitatakse, lisab teine transaktsioon vastavad read või kustutab need ning sama päringu korduv käivitamine annab teistsuguse tulemuse.
-
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; -
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.