Перейти к содержимому

ROLLBACK

ROLLBACK отменяет приватную работу транзакции.

ROLLBACK [TRANSACTION]
ROLLBACK [TRANSACTION] TO [SAVEPOINT] savepoint_name

Обычная форма завершает транзакцию и отменяет всю её работу. ROLLBACK TO отменяет лишь изменения после указанной точки и сохраняет активными транзакцию и саму целевую точку.

TRANSACTION и SAVEPOINT являются необязательными словами. Имена точек без кавычек не зависят от регистра, имена в кавычках сохраняют регистр.

Успех возвращает пустой командный результат. Форма TO сохраняет транзакцию активной, обычная форма завершает её.

Перед повторением всей транзакции после serialization conflict, взаимоблокировки или row-lock timeout выполняйте обычный ROLLBACK. В проверенном TCP-контракте после ошибки ограничения транзакция явно сохраняет способность к откату.

Обычный откат без транзакции и форма TO без живой точки завершаются ошибкой. Embedded, TCP и CLI версии 1.2 направляют ROLLBACK TO в активную транзакцию текущего подключения.

ROLLBACK не требует отдельного объектного права и не может отменить транзакцию другого соединения.

CREATE TABLE ref_rollback (id INTEGER PRIMARY KEY);
BEGIN;
INSERT INTO ref_rollback VALUES (1);
ROLLBACK;
SELECT id FROM ref_rollback;

См. Транзакции и конкурентность, SAVEPOINT и RELEASE SAVEPOINT.