SAVEPOINT
Определяет новую точку сохранения в рамках текущей транзакции.
Синтаксис
SAVEPOINT <savepoint_name>
Описание
SAVEPOINT устанавливает новую точку сохранения в текущей транзакции.
Точка сохранения — это специальная метка внутри транзакции, которая позволяет отменить все команды, выполненные после нее, восстановив состояние транзакции на момент установки этой точки.
Параметры
| Параметр | Описание |
|---|---|
savepoint_name |
Имя новой точки сохранения |
Примечания
Чтобы откатиться к точке сохранения, используйте ROLLBACK TO SAVEPOINT. Команда 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.
Совместимость
В SQL требуется автоматическое удаление точки сохранения при создании другой точки сохранения с тем же именем. В Greengage DB старая точка сохранения остается, однако при откате или высвобождении будет использоваться только самая последняя. Высвобождение последней точки сохранения приведет к тому, что старая точка сохранения снова станет доступна для команд ROLLBACK TO SAVEPOINT и RELEASE SAVEPOINT. В остальном, SAVEPOINT полностью соответствует требованиям SQL.