SAVEPOINT#
SAVEPOINT
SAVEPOINT — определить новую точку сохранения в текущей транзакции
Синтаксис
SAVEPOINT savepoint_name
Описание
SAVEPOINT
устанавливает новую точку сохранения в пределах текущей транзакции.
Сейвпоинт - это специальная метка внутри транзакции, которая позволяет откатить все команды, выполненные после ее установки, восстанавливая состояние транзакции до того, как был создан сейвпоинт.
Параметры
savepoint_name
Имя, которое будет присвоено новой точке сохранения. Если точки сохранения с таким же именем уже существуют, они будут недоступны до тех пор, пока не будут освобождены более новые точки сохранения с тем же именем.
Примечания
Используйте ROLLBACK TO
для отката к точке сохранения. Используйте RELEASE SAVEPOINT
для удаления точки сохранения, сохраняя эффекты команд, выполненных после ее создания.
Сохранительные точки могут быть установлены только внутри блока транзакции. В рамках одной транзакции может быть определено несколько сохранительных точек.
Примеры
Для установки точки сохранения и последующего отмены эффектов всех команд, выполненных после ее установки:
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT;
Вышеуказанная транзакция вставит значения 1 и 3, но не 2.
Для создания и последующего удаления точки сохранения:
BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT;
Вышеуказанная транзакция вставит и 3, и 4.
Для использования одного имени точки сохранения:
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); -- rollback to the second savepoint ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- shows rows 1 and 2 -- release the second savepoint RELEASE SAVEPOINT my_savepoint; -- rollback to the first savepoint ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- shows only row 1 COMMIT;
Вышеуказанная транзакция показывает, что сначала откатывается строка 3, а затем строка 2.
Совместимость
SQL требует, чтобы точка сохранения автоматически уничтожалась, когда устанавливается другая точка сохранения с тем же именем. В Tantor BE старая точка сохранения сохраняется, хотя при откате или освобождении будет использоваться только более новая. (Освобождение новой точки сохранения с помощью RELEASE SAVEPOINT
приведет к тому, что старая снова станет доступной для ROLLBACK TO SAVEPOINT
и RELEASE SAVEPOINT
). В остальном SAVEPOINT
полностью соответствует стандарту SQL.