Sobes.tech
Middle

Шумо кадом сатҳҳои ҷудоии транзаксия дар базаҳои додаҳоро медонед?

sobes.tech AI

Ҷавоб аз AI

У стандарті SQL визначено чотири рівні ізоляції транзакцій: Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  1. Read Uncommitted: Найнижчий рівень. Транзакція може читати дані, які ще не зафіксовані (тобто виконані іншою транзакцією, яка ще не завершена COMMIT). Це призводить до "брудних" читань (dirty reads).

  2. Read Committed: Транзакція бачить лише ті дані, які були зафіксовані до початку або під час її виконання. Запобігає "брудним" читанням, але допускає неповторювані читання (non-repeatable reads) і фантоми (phantom reads).

    • Неповторювані читання: Одне й те саме читання у межах однієї транзакції повертає різні дані, оскільки інша транзакція між читаннями змінила і зафіксувала їх.
    • Фантоми: При виконанні запиту з умовою WHERE друга транзакція додає або видаляє рядки, що відповідають умові, і повторне виконання того ж запиту у межах першої транзакції повертає інший набір рядків.
  3. Repeatable Read: Транзакція бачить лише ті дані, які були зафіксовані до її початку. Гарантує, що повторні читання одних і тих самих рядків у межах однієї транзакції повернуть однакові дані. Запобігає "брудним" і неповторюваним читанням. Допускає фантоми.

    // Приклад Repeatable Read
    // Транзакція 1
    // BEGIN TRANSACTION;
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Наприклад, 100
    
    // Транзакція 2 (виконується одночасно)
    // BEGIN TRANSACTION;
    // INSERT INTO users (name, status) VALUES ('Новий користувач', 'active');
    // COMMIT;
    
    // Транзакція 1
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Ще 100 (фантом)
    // COMMIT;
    
  4. Serializable: Найвищий рівень ізоляції. Гарантує, що паралельне виконання транзакцій буде еквівалентним деякому послідовному виконанню цих транзакцій. Запобігає "брудним" читанням, неповторюваним читанням і фантомам. Може призводити до зниження продуктивності через блокування.

У різних системах управління базами даних можуть бути свої реалізації та особливості рівнів ізоляції, а також додаткові рівні. Наприклад, у MySQL InnoDB за замовчуванням є Repeatable Read.