Що таке транзакція в базі даних
Транзакція в базі даних - це набір змін в базі даних, який повинен бути виконаний в цілому. Простішими словами, це команда або блок команд (типу INSERT, UPDATE і т.д.), які застосовуються разом по принципу все-або-нічого.
Іншbv важливим призначенням транзакцій є забезпечення незалежності змін від інших транзакцій (ізоляція транзакцій) у конкурентному середовищі, коли з однією базою працюють одночасно різні користувачі / програми.
Операція Commit записує зміни, зроблені після початку транзакції, в базу даних, а операція Rollback відміняє ці зміни.
Зауваження
Транзакції можуть проходити по-різному в різних базах даних. Є бази даних даних, де лише операції маніпуляції даними можуть використовуватися у транзакціях, а інші операції (зміна структури, надання привілеїв і т.д.) застосовуються поза конктекстом транзакцій. Є бази даних, де транзакції не підтримуються взагалі. З цього приводу читайте документацію вашої СKБД.
Робота з транзакціями
В Database Tour контроль транзакцій залежить від опції авто-commit:
Якщо опція авто-commit ввімкнена, то для кожної команди в базі даних буде відбуватися автоматичний commit, a rollback буде неможливий. Але і в цьому режимі ви можете керувати транзакціями вручну за допомого меню База даних | Транзакції або кнопок Почати транзакцію, Commit та Rollback. Якщо ви почали транзакцію вручну, авто-commit вимикається і для транзакції потрібно вручну робити commit або rollback. Після commit або rollback опція авто-commit вмикається знову.
Якщо опція авто-commit вимкнена (по замовчанню), програма сама неявно розпочинає транзакцію в разі потреби. Після запуску транзакції копки Commit та Rollback загоряються і потрібно вручну робити commit або rollback.
Зауваження
- Програма намагається, якщо можливо, створювати окрему сесію бази даних для кожного вікна SQL або Таблиця у відкритій базі даних, і окрему транзакцію для кожної сесії. Ця поведінка залежить від типу бази даних ти використовуваного інтерфейсу баз даних. Наприклад, в локальній базі даних BDE всі дочірні вікна пов'язані лише з однією транзакцією. Для інтерфейсу Interbase та більшості типів баз даних інтерфейсу FD кожне вікно має окрему транзакцію.
- Кнопки та елементи меню для керування транзакціями є спільними для всіх дочірніх вікон (сесій бази даних) навіть якщо вікна пов'язані з різними транзакціями. Кожного разу, коли ви переключаєтеся між вікнами типу SQL або Table, ці кнопки та елементи меню будуть відображати поточний стан відповідної транзакції. Наприклад, коли кнопки загоряються, то транзакція поточного вікна (сесії) активна (тобто розпочата, і для неї не було зроблено commit або rollback).
- В усіх плаваючих вікнах та в операціях DDL, ініційованих через графічний інтерфейс програми (тобто не через Редактор SQL), використовується авто-commit і відображується відповідне попередження.
Ізоляція транзакцій
Якщо відкрито базу даних і ще не запущено транзакцію, ви можете вибрати рівень ізоляції транзакцій (меню База | Ізоляція транзакцій), який встановлює правила відображення даних при роботі кількох клієнтів з однією БД:
- dirty read - в поточній транзакції видимі всі зміни, внесені іншими транзакціями, навіть не підтверджені;
- read comitted - конкуруючі транзакції бачать тільки підтверджені зміни;
- repeatable read - в транзакції видимі ті зміни, що були в базі на момент початку цієї транзакції.
На додачу до цих рівнів ізоляції, в підключеннях ADO можуть використовуватися також наступні:
- Chaos
- Browse
- Cursor Stability
- Serializable, Isolated
- Unspecified
Не всі рівні ізоляції транзакцій доступні для різних типів БД - напр., для локальних БД, відкритих через BDE, можна встановити тільки 1 рівень: незафіксовані зміни.