Що таке транзакція
ЩО ТАКЕ транзакції. ТРАНЗАКЦІЇ І ЦІЛІСНІСТЬ БД
Під транзакцією розуміється неподільна з точки зору впливу на БД послідовність операторів маніпулювання даними (читання, видалення, вставки, модифікації) така, що або результати всіх операторів, що входять в транзакцію, відображаються в БД, або вплив всіх цих операторів повністю відсутня.
Операція вважається транзакцією, якщо вона задовольняє вимогам ACID -Тест (Atomicity. Consistency. Isolation. Durability атомарность, узгодженість, ізольованість, довговічність).
Атомарність - гасло транзакції - "Все або нічого": при завершенні транзакції оператором COMMIT результати гарантовано фіксуються у зовнішній пам'яті (сенс слова commit - "зафіксувати" результати транзакції); при завершенні транзакції оператором ROLLBACK результати гарантовано відсутні в зовнішній пам'яті (сенс слова rollback - ліквідувати результати транзакції).
Узгодженість - по закінченню транзакції цілісність повинна бути встановлена, але в ході виконання транзакції цілісність може тимчасово порушуватися.
Ізольованість означає, що паралельно виконуються транзакції не заважають один одному.
Довговічність означає, що всі підтверджені в ході виконання зміни повинні бути внесені в базу даних навіть у разі збоїв системи.
Підтримка механізму транзакцій - показник рівня розвиненості СУБД. Коректне механізм підтримки транзакцій одночасно є основою забезпечення цілісності баз даних і також є базисом ізольованості користувачів в багатокористувацьких системах. Часто ці два аспекти розглядаються окремо, але насправді вони взаємопов'язані, що і буде показано нижче.
Зауважимо, що хоча з точки зору забезпечення цілісності баз даних механізм транзакцій було б підтримувати в персональних СУБД, на практиці це зазвичай не виконується. Тому при переході від персональних до розрахованих на багато СУБД користувачі стикаються з необхідністю чіткого розуміння природи транзакцій.
Транзакції і цілісність баз даних
Поняття транзакції має безпосередній зв'язок з поняттям цілісності БД. Дуже часто БД може володіти такими обмеженнями цілісності, які просто неможливо не порушити, виконуючи лише один оператор зміни БД. Наприклад, нехай в базі даних є дві таблиці СПІВРОБІТНИКИ і ВІДДІЛИ. Природним обмеженням цілісності є збігу значення атрибута ПТД _РАЗМЕР в кортежі відносини ВІДДІЛИ, що описує даний відділ, з числом кортежів відносини СПІВРОБІТНИКИ даного відділу. Як в цьому випадку прийняти на роботу у відділ нового співробітника? Незалежно від того, яка операція буде виконана першої (вставка нового кортежу в відношення СПІВРОБІТНИКИ або модифікація існуючого кортежу відносно ВІДДІЛИ) після виконання операції база даних виявиться в нецілісність стані.
Тому для підтримки подібних обмежень цілісності допускається їх порушення в транзакції з тією умовою, щоб до моменту завершення транзакції умови цілісності були дотримані. У системах з розвиненими засобами обмеження та контролю цілісності кожна транзакція починається при цілісному стані БД і повинна залишити цей стан цілісними після свого завершення. Недотримання цієї умови призводить до того, що замість фіксації результатів транзакції відбувається її відкат (тобто замість оператора COMMIT виконується оператор ROLLBACK), і БД залишається в такому стані, в якому перебувала до моменту початку транзакції, тобто в цілісному стані.