Transakcija grupira naredbe u jednu atomsku jedinicu: ili se sve potvrde ili se sve povuku, dajući A, C, I, D iz ACID-a. Razina izolacije podešava "I" — koliko istovremene transakcije mogu vidjeti tuđe nepotvrđene ili promjenjive podatke.
Transakcija grupira naredbe u jednu atomsku jedinicu: ili se sve potvrde ili se sve povuku, dajući A, C, I, D iz ACID-a. Razina izolacije podešava "I" — koliko istovremene transakcije mogu vidjeti tuđe nepotvrđene ili promjenjive podatke.
| Razina | Prljavo čitanje | Neponovljivo čitanje | Fantom |
|---|
| READ UNCOMMITTED | moguće | moguće | moguće |
| READ COMMITTED | ne | moguće | moguće |
| REPEATABLE READ (InnoDB zadano) | ne | ne | uglavnom ne* |
| SERIALIZABLE | ne | ne | ne |
*InnoDB-ov REPEATABLE READ koristi MVCC (svaka transakcija čita dosljedni snimak) plus next-key locks, pa blokira i većinu fantoma — jače nego što SQL standard zahtijeva.
SELECT @@transaction_isolation; -- REPEATABLE-READ prema zadanom
START TRANSACTION;
SELECT balance FROM accounts WHERE id = 1; -- snimak uzet ovdje
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- oba ažuriranja se primjenjuju, ili ih ROLLBACK oba poništava
Zadržite InnoDB zadano (REPEATABLE READ) osim ako imate razlog. READ COMMITTED (što je zadano za Postgres/Oracle) smanjuje natjecanje za zaključavanjem kod sustava s puno upisa; SERIALIZABLE je ispravan, ali serijalizira sukobljeni rad i može češće izazvati deadlock.
Izolacija je regulator između ispravnosti i konkurentnosti. Razumijevanje ovih anomalija omogućuje vam da objasnite bugove poput "zbroj se nije poklopio pod opterećenjem" i odaberete razinu koja drži transakcije koje pomiču novac ispravnima bez nepotrebnog prigušivanja propusnosti.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj