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

SAVEPOINT

SAVEPOINT записывает точку отката активной транзакции.

SAVEPOINT savepoint_name

Последующую работу можно отменить через ROLLBACK TO, не отбрасывая предыдущие изменения. После ROLLBACK TO точка остаётся активной до RELEASE или завершения транзакции.

savepoint_name является идентификатором. Имена без кавычек не зависят от регистра, а имена в кавычках сохраняют регистр.

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

SAVEPOINT допустим только после BEGIN. COMMIT и обычный ROLLBACK удаляют все точки этой транзакции.

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

SAVEPOINT не требует отдельного объектного права. Операторы до и после него сохраняют обычные требования доступа.

CREATE TABLE ref_savepoint (id INTEGER PRIMARY KEY, value INTEGER);
BEGIN;
INSERT INTO ref_savepoint VALUES (1, 10);
SAVEPOINT before_change;
UPDATE ref_savepoint SET value = 20 WHERE id = 1;
ROLLBACK TO SAVEPOINT before_change;
COMMIT;
SELECT id, value FROM ref_savepoint;

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