SQL — Транзакції

593

Від автора: транзакція — це одиниця роботи, яка виконується у відношенні бази даних. Транзакції SQL — це одиниці роботи або послідовності дій, виконаних у логічному порядку: вручну або автоматично за допомогою якої-небудь програми бази даних.

Транзакція — це здійснення одного або декількох змін бази даних. Наприклад, якщо ви створюєте, оновлюєте або видалити запис з таблиці, ви виконуєте в цій таблиці транзакцію. Важливо контролювати транзакції, щоб забезпечити цілісність даних і обробляти помилки бази даних.

Практично ви збираєте безліч SQL-запитів в групу, і вони будуть виконуватися разом як частина транзакції.

Властивості транзакцій

Транзакції мають наступні чотири стандартних властивості, зазвичай позначаються абревіатурою ACID.

Атомарність – забезпечує, щоб всі операції, що входять в одиницю роботи були завершені успішно. В іншому випадку транзакція переривається в момент збою, і всі попередні операції повертаються у колишній стан.

Узгодженість — забезпечує, щоб база даних належним чином змінювала стан при успішній транзакції.

Ізольованість — транзакцій дозволяє працювати незалежно один від одного і прозоро.

Довговічність — гарантує, що результат здійсненої транзакції збережеться в разі збою системи.

Управління транзакціями

Для управління транзакціями використовуються наступні команди.

COMMIT — зберегти зміни.

ROLLBACK — скасувати зміни.

SAVEPOINT — створює точки збереження в групах транзакцій.

SET TRANSACTION — поміщає ім’я в інтернеті.

Команди керування транзакціями

Команди управління транзакціями використовуються тільки з командами DML, такими як — INSERT, UPDATE і DELETE. Вони не можуть використовуватися при створенні таблиць або їх видаленні, оскільки ці операції автоматично фіксуються в базі даних.

Команда COMMIT

Команда COMMIT — це транзакційна команда, використовувана для збереження змін, внесених транзакцією в базу даних. Команда COMMIT зберігає всі транзакції в базі даних з моменту виконання останньої команди COMMIT або ROLLBACK.

Синтаксис команди COMMIT наступний.

COMMIT;

Приклад

Розглянемо таблицю CUSTOMERS, містить наступні записи:

SQL — Транзакції

Нижче наведено приклад, в якому з таблиці будуть видалені клієнти з віком = 25, а потім ці зміни будуть збережені в базі даних.

DELETE FROM CUSTOMERS
WHERE AGE = 25;
COMMIT;

Таким чином, з таблиці будуть видалені два рядки, і результат виконання оператора SELECT буде виглядати наступним чином.

SQL — Транзакції

Команда ROLLBACK

Команда ROLLBACK — це транзакційна команда, використовувана для скасування транзакцій, які ще не були збережені в базі даних. Ця команда може використовуватися тільки для скасування транзакцій з моменту виконання останньої команди COMMIT або ROLLBACK.

Синтаксис команди ROLLBACK наступний:

ROLLBACK;

Приклад

Розглянемо таблицю CUSTOMERS, містить наступні записи:

SQL — Транзакції

Нижче наведено приклад, в якому з бази даних будуть видалені всі записи для яких вік = 25, а потім ці зміни будуть скасовані.

DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK;

Таким чином, операція видалення не призведе до змін у таблиці, і результат виконання оператора SELECT буде виглядати наступним чином.

SQL — Транзакції

Команда SAVEPOINT

SAVEPOINT – це точка транзакції, до якої ви можете повернути транзакцію, не відкочуючись її повністю. Синтаксис команди SAVEPOINT наведено нижче.

SAVEPOINT SAVEPOINT_NAME;

Ця команда призначена тільки для створення SAVEPOINT в інших транзакційних операторах. Команда ROLLBACK використовується для скасування групи транзакцій до точки SAVEPOINT.

Синтаксис, який використовується для повернення до SAVEPOINT, показаний нижче.

ROLLBACK TO SAVEPOINT_NAME;

Нижче наведено приклад ситуації, коли ми плануємо видалити три різних записи з таблиці CUSTOMERS. Ми можемо створити SAVEPOINT перед кожним видаленням, щоб мати можливість відкотити операцію до будь SAVEPOINT будь-який час і повернути дані у вихідний стан.

Приклад

Розглянемо таблицю CUSTOMERS, що містить такі записи.

SQL — Транзакції

Наступний блок коду містить ряд операцій.

SAVEPOINT SP1;
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SAVEPOINT SP2;
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SAVEPOINT SP3;
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Тепер, після того, як були виконані зміни, припустимо, що ви передумали і вирішили відкотити операцію до точки SAVEPOINT, яку ви визначили як SP2. Оскільки SP2 була створена після першого видалення, останні два видалення будуть скасовані:

ROLLBACK TO SP2;
Rollback complete.

Зверніть увагу, що перед тим як ми повернулися до SP2, було вироблено перше вилучення

SQL — Транзакції

Команда RELEASE SAVEPOINT

Команда RELEASE SAVEPOINT використовується для видалення створеної точки SAVEPOINT. Синтаксис команди RELEASE SAVEPOINT наступний.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Після того як SAVEPOINT буде видалена, ви більше не зможете використовувати команду ROLLBACK для скасування транзакцій, виконаних після останньої SAVEPOINT.

Команда SET TRANSACTION

Команда SET TRANSACTION може використовуватися для ініціювання транзакцій бази даних. Ця команда використовується для зазначення характеристик трансакцій, яка задається після команди. Наприклад, ви можете задати для транзакції режим тільки читання або читання і запис. Синтаксис команди SET TRANSACTION наступний.

SET TRANSACTION [ READ WRITE | READ ONLY ];