с Firebird 2.5 ваша версия: любая

ROLLBACK

Версии сервера

2.53.04.05.06.0
ДаДаДаДаДа

Доступно в

DSQL, ESQL

Формат

ROLLBACK [WORK] [TRANSACTION tr_name]
  [RETAIN [SNAPSHOT] | TO SAVEPOINT sp_name] [RELEASE];
ПараметрОписание
tr_nameИмя транзакции. Доступно только в ESQL.
sp_nameИмя точки сохранения. Доступно только в DSQL.

Описание

Оператор ROLLBACK отменяет все изменения данных базы данных (добавление, изменение, удаление), выполненные в контексте транзакции. Оператор никогда не вызывает ошибок. Если не указано предложение RETAIN, при его выполнении освобождаются все ресурсы сервера, связанные с данной транзакцией.

Необязательное предложение TRANSACTION задаёт имя транзакции и доступно только в Embedded SQL. За счёт именованных транзакций допускается одновременный запуск нескольких активных транзакций в одном приложении; при этом должна быть объявлена и инициализирована одноимённая переменная базового языка. Если TRANSACTION не указано, оператор применяется к транзакции по умолчанию. Ключевое слово WORK используется только для совместимости с другими СУБД.

Ключевое слово RETAIN указывает, что все изменения данных отменяются, а транзакция остаётся активной, сохраняя свой идентификатор, контекст и курсоры. Для уровней изоляции SNAPSHOT и SNAPSHOT TABLE STABILITY вид базы данных остаётся таким, каким он был при старте транзакции; для READ COMMITTED база принимает состояние на момент выполнения ROLLBACK RETAIN. При откате с сохранением контекста заново выполнять SELECT не требуется.

Предложение TO SAVEPOINT (только DSQL) выполняет откат к именованной точке сохранения: отменяются только изменения, сделанные после её создания, освобождаются соответствующие блокировки строк, а более поздние точки сохранения удаляются. Значения пользовательского контекста, установленные через RDB$SET_CONTEXT(), при откате к точке сохранения не сбрасываются.

Пример

Полный откат транзакции:

UPDATE employees SET salary = salary * 1.1 WHERE dept_no = 600;
-- решение изменено: отменяем обновление целиком
ROLLBACK;

Частичный откат к точке сохранения:

INSERT INTO orders (order_id, customer_id) VALUES (1001, 15);
SAVEPOINT before_details;

INSERT INTO order_details (order_id, product_id, qty) VALUES (1001, 220, 3);
-- ошибка в данных позиций: откатываемся к точке сохранения,
-- сама вставка заказа сохраняется
ROLLBACK TO SAVEPOINT before_details;

См. также

COMMIT, SAVEPOINT, SET TRANSACTION, Разновидности языка SQL

Источник

Руководство по языку SQL СУБД Firebird 5.0 (sim1984 / ibase.ru, Public Documentation License)

Обсуждение