Інструкція rollback - sql програмування

Інструкція ROLLBACK повертає транзакцію в її початковий стан або до певної, заздалегідь заданій точці збереження (SAVEPOINT). Також інструкція ROLLBACK закриває всі відкриті курсори.

Ключові слова

Додаткове ключове слово, яке по суті ніякої ролі не грає.

Інструкція AND CHAIN ​​змушує СУБД завершити поточну транзакцію, але середовище транзакції (наприклад, рівень ізоляції транзакцій) залишається в загальному користуванні для наступної транзакції. Пропозиція AND NO CHAIN ​​просто завершує транзакцію (так система надходить і за замовчуванням).

ТО SAVEPOINT імя_точкі_сохраненія

Дозволяє не скасовувати всю транзакцію, а відкотити її до зазначеної точці збереження (тобто виконується частковий відкат). Параметр імя_точкі_сохраненія може являти собою постійне вираз або змінну. Якщо немає активних точок збереження, то інструкція поверне помилку. Якщо пропозиція ТО SAVEPOINT опущено, закриваються всі курсори. Якщо пропозиція ТО SAVEPOINT зазначено, то закриваються тільки ті курсори, які були відкриті відповідною інструкцією SAVEPOINT.

Крім скасування одиночних операцій по маніпуляції даними, таких, як INSERT, UPDATE або DELETE (або їх пакета), інструкція ROLLBACK скасовує транзакції аж до останньої поданої інструкції START TRANSACTION, SET TRANSACT / ON або SAVEPOINT.

Загальні правила

Інструкція ROLLBACK використовується для скасування транзакції. Її можна застосовувати для скасування транзакцій, що запускаються явно (за допомогою інструкції START TRAN) або неявно, за допомогою ініціації транзакцію інструкції. Також її можна використовувати для скасування неявних транзакцій, що запускаються без інструкції START'TRAN. Інструкції ROLLBACK і COMMIT є взаємовиключними.

Більшість людей пов'язують з терміном «транзакція» такі команди, як INSERT, UPDATE і DELETE. Однак транзакції включають в себе найрізноманітніші команди. Список таких команд різний на різних платформах, але, як правило, сюди входять команди, які змінюють дані і структури бази даних і які реєструються механізмом ведення журналу бази. Відповідно до стандарту ANSI, за допомогою інструкції ROLLBACK можна скасувати будь-які інструкції SQL.

Поради та хитрості програмування

Платформа DB2 підтримує базову форму інструкції стандарту ANSI. Чи не підтримується пропозиція [AND [NO] CHAIN]. (Також зверніть увагу, що DB2 не підтримує інструкцію START TRANSACTION, тому всі транзакції в DB2 запускаються неявно.) Синтаксис інструкції ROLLBACK в DB2 наступний.

ROLLBACK [WORK] [ТО SAVEPOINT імя_точкі_сохраненія]

Кілька інструкцій SET в DB2 не охоплюються системою контролю транзакцій, і, отже, їх не можна відкотити. Сюди входять такі інструкції: SET CONNECTION, SET CURRENT DEFAULT TRANSFORM GROUP, SET CURRENT DEGREE, SET CURRENT EXPLAIN MODE, SET CURRENT EXPLAIN SNA PSHOT, SET CURRENT PA CKA GESET, SET CURRENT QUERY OPTIMIZATION, SET CURRENT REFRESH AGE, SET EVENT MONITOR STATE, SETPASSTHRU, SET PATH, SET SCHEMA і SET SERVER OPTION.

Платформа DB2 виконує неявний відкат, якщо елемент завдання завершується помилкою.

Платформа MySQL підтримує лише найпростіший механізм відкату, і навіть при цьому ви повинні оголошувати кожну таблицю, стосовно якої ви можете виконати інструкцію ROLLBACK як безпечну для транзакцій (transaction safe). Безпечна для транзакцій таблиця - це таблиця, оголошена з властивістю InnoDB або BDB. За додатковою інформацією звертайтеся до розділу, присвяченому інструкції CREATE TABLE.

ROLLBACK [ТО SAVEPOINT імя_точкі_сохраненія]

MySQL дозволяє виконувати інструкції, пов'язані з управлінням транзакціями, стосовно до небезпечних таблиць, але ці інструкції просто ігноруються, і виконання транзакцій відбувається автоматично. У разі використання інструкції ROLLBACK в небезпечній таблиці відкат змін проводитися не буде.

За замовчуванням MySQL працює в режимі AUTOCOMMIT, де всі модифікації даних автоматично записуються на диск. Ви можете відключити режим A UTOCOMMIT, подавши команду SET'AUTOCOMMIT = 0. Ви також можете контролювати автоматичне виконання транзакцій по одній інструкції, використовуючи команду BEGIN і BEGIN WORK.

Платформа MySQL автоматично виконує неявну інструкцію COMMIT по завершенні будь-якої з наведених інструкцій: ALTER TABLE, BEGIN, CREATE INDEX, DROP DATABASE, DROP TABLE, RENAME TABLE і TRUNCATE.

MySQL підтримує часткове відкат з використанням точок збереження починаючи з версії 4.0.14.

Oracle підтримує ANSI форму інструкції ROLLBACK з додатковою пропозицією FORCE.

Інструкція ROLLBAСК видаляє всі модифікації даних, внесені в поточній відкритій транзакції (або після зазначеної існуючої точки відновлення). Також знімаються всі блокування, використовувані транзакцією, очищаються всі точки збереження, буде видалено зміни поточної транзакції, і транзакція завершується.

Інструкція ROLLBACK ... ТО SAVEPOINT виробляє відкат частини транзакції, що йде після точки збереження. За додатковою інформацією звертайтеся до розділу «Інструкція SAVEPOINT».

Реалізація інструкції ROLLBACK в Oracle близька до стандарту ANSI, за винятком пропозиції FORCE. Інструкція ROLLBACK FORCE скасовує сумнівну розподілену транзакцію. Щоб виконати цю інструкцію, ви повинні мати привілей FORCE TRANSACTION. Пропозиція FORCE можна використовувати з пропозицією ТО [SAVEPOINT]. Інструкція ROLLBACK FORCE може впливати не на поточну транзакцію, а на транзакцію, зазначену в секції "Тайм текст '. Параметр 'текст' повинен являти собою локальний або глобальний ID транзакції, яку ви хочете скасувати. (Такі транзакції і їх ID докладно описані в системному поданні Oracle DBA_2PC_PENDING.)

Наприклад, вам може знадобитися повернути вашу поточну транзакцію до точки збереження salary_adjustment. Дві наведені нижче команди еквівалентні.

ROLLBACK WORK ТО SAVEPOINT salary_adjustment; ROLLBACK TO salary_adjustment;

У наступному прикладі ми відкатуємо сумнівну розподілену транзакцію.

ROLLBACK FORCE '45 .52.67 '

PostgreSQL

Платформа PostgreSQL підтримує базову форму інструкції ROLLBA СК, але не підтримує точки збереження.

PostgreSQL

Інструкція ROLLBA СК видаляє всі модифікації даних, внесені в поточній відкритій транзакції. Якщо відкриті транзакції відсутні, інструкція генерує помилку. PostgreSQL підтримує як пропозиція WORK, так і пропозиція TRANSA CTION, Чи не підтримується відкат до точки збереження. Платформа PostgreSQL підтримує ключове слово ABORT як синонім ROLLBACK.

SQL Server

Платформа SQL Server підтримує ключові слова WORK і TRAN. Єдина відмінність між ними полягає в тому, що інструкція ROLLBACK WORK не дозволяє відкочувати зазначену транзакцію до зазначеної точці збереження.

Якщо інструкція ROLLBACK використовується без ключових слів WORK або TRAN, то вона скасовує всі відкриті в даний момент транзакції. Інструкція ROLLBACK, як правило, відключає блокування, але блокування не знімає, якщо відбувається відкат до точки збереження.

SQL Server дозволяє вказувати крім імені_точкі_сохраненія конкретне імя_транзакціі. Ви можете вказувати їх безпосередньо або за допомогою змінних в коді Transact-SQL.

Якщо інструкція ROLLBACK TRANSACTION виконується в тригері, вона скасовує всі модифікації даних, включаючи ті, які справив тригер, до моменту подачі інструкції ROLLBACK. Вкладені тригери не виконуються, якщо вони йдуть в тексті тригера після інструкції ROLLBACK. Однак на інструкції, які йдуть в тригері після ROLLBACK, ця інструкція не впливає. Команда ROLLBACK подібна до інструкції COMMIT в плані вкладеності, установки в нуль системної змінної @TRANSCOUNT (за додатковою інформацією про контроль транзакцій у вкладеному триггере SQL Server звертайтеся до розділу «Інструкція СОММIТ»).

Нижче наводиться пакет Transact-SQL, який використовує інструкції COMMIT і ROLLBACK на Microsoft SQL Server. У цьому прикладі в таблицю sales вставляється запис. Якщо при вставці виявилася невдалою, то відбувається відкат транзакції. Якщо вставка проходить успішно, транзакція фіксується.

Додаткова інформація по темі

Правила і методи використання інструкції REVOKE в базах даних на різних платформах

Схожі статті