Sobes.tech
Middle

Koje nivoe izolacije transakcija u bazama podataka poznaješ?

sobes.tech АИ

Одговор од АИ

U SQL standardu definisana su četiri nivoa izolacije transakcija: Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  1. Read Uncommitted: Najniži nivo. Transakcija može da čita podatke koji još nisu potvrđeni (tj. izvršeni od strane druge transakcije koja još nije završila sa COMMIT). To dovodi do "prljavih" čitanja (dirty reads).

  2. Read Committed: Transakcija vidi samo podatke koji su potvrđeni pre ili tokom njenog izvršenja. Sprečava "prljava" čitanja, ali dozvoljava neponovljiva čitanja (non-repeatable reads) i fantome (phantom reads).

    • Neponovljiva čitanja: Isto čitanje unutar jedne transakcije može vratiti različite podatke, jer je druga transakcija promenila i potvrdila te podatke.
    • Fantom čitanja: Pri izvršenju upita sa uslovom WHERE, druga transakcija dodaje ili briše redove koji zadovoljavaju uslov, a ponovnim izvršenjem istog upita unutar prve transakcije dobijaju se drugi skupovi redova.
  3. Repeatable Read: Transakcija vidi samo podatke koji su potvrđeni pre njenog početka. Garantuje da će ponovljena čitanja istih redova unutar jedne transakcije vratiti iste podatke. Sprečava "prljava" i neponovljiva čitanja. Dozvoljava fantome.

    // Primer Repeatable Read
    // Transakcija 1
    // BEGIN TRANSACTION;
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Na primer, 100
    
    // Transakcija 2 (istovremeno)
    // BEGIN TRANSACTION;
    // INSERT INTO users (name, status) VALUES ('Novi korisnik', 'active');
    // COMMIT;
    
    // Transakcija 1
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Još uvek 100 (fantom)
    // COMMIT;
    
  4. Serializable: Najviši nivo izolacije. Garantuje da će paralelno izvršavanje transakcija biti ekvivalentno nekom sekvencijalnom izvršavanju tih transakcija. Sprečava "prljava" čitanja, neponovljiva čitanja i fantome. Može dovesti do smanjenja performansi zbog zaključavanja.

U različitim DBMS-ovima mogu postojati sopstvene implementacije i karakteristike nivoa izolacije, kao i dodatni nivoi. Na primer, u MySQL InnoDB, podrazumevani nivo je Repeatable Read.