Transakcija združi stavke v eno atomarno enoto: ali se vsi potrdijo ali pa se vsi razveljavijo, kar daje A, C, I, D iz ACID. Raven izolacije uravnava "I" — koliko sočasne transakcije lahko vidijo drug drugove nepotrjene ali spreminjajoče se podatke.
Transakcija združi stavke v eno atomarno enoto: ali se vsi potrdijo ali pa se vsi razveljavijo, kar daje A, C, I, D iz ACID. Raven izolacije uravnava "I" — koliko sočasne transakcije lahko vidijo drug drugove nepotrjene ali spreminjajoče se podatke.
| Raven | Umazano branje | Neponovljivo branje | Fantom |
|---|
| READ UNCOMMITTED | možno | možno | možno |
| READ COMMITTED | ne | možno | možno |
| REPEATABLE READ (privzeto v InnoDB) | ne | ne | večinoma ne* |
| SERIALIZABLE | ne | ne | ne |
*REPEATABLE READ v InnoDB uporablja MVCC (vsaka transakcija bere konsistenten posnetek) skupaj z next-key locks, zato blokira tudi večino fantomov — močneje, kot zahteva standard SQL.
SELECT @@transaction_isolation; -- REPEATABLE-READ by default
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1; -- snapshot taken here
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- both updates apply, or ROLLBACK undoes both
Obdržite privzeto raven InnoDB (REPEATABLE READ), razen če imate razlog. READ COMMITTED (kar je privzeto v Postgres/Oracle) zmanjša tekmovanje za zaklepe pri sistemih z veliko pisanja; SERIALIZABLE je pravilen, a serializira konfliktno delo in se lahko pogosteje zaklene v mrtvi zanki.
Izolacija je gumb med pravilnostjo in sočasnostjo. Razumevanje teh anomalij vam omogoča razložiti napake, kot je "vsota se pod obremenitvijo ni ujela", in izbrati raven, ki ohranja pravilnost transakcij s premikanjem denarja, ne da bi po nepotrebnem dušila prepustnost.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj