SAVEPOINT
在事务内创建称之为保存点的特殊标记。创建保存点后,它允许回退所有已执行的命令,将事务还原到创建保存点时其所在的状态。
提示
保存点在创建嵌套事务时非常有用。例如,子例程开始时可能会创建保存点。这样,可在必要时回退子例程的结果。语法
SAVEPOINT savepoint_name
参数
savepoint_name
- 指定要创建的保存点的名称。
特权
无
注意
-
保存点是事务的局部保存点,只能在事务块内时才可创建。
-
可在事务内定义多个保存点。
-
如果具有相同名称的保存点已存在,则其会被新保存点替换。
示例
以下示例显示了保存点如何确定事务内可回退的值。创建保存点“my_savepoint”后输入的值 102 和 103 已回退。在提交时仅插入了值 101 和 104。
=> INSERT INTO T1 (product_key) VALUES (101);
=> SAVEPOINT my_savepoint;
=> INSERT INTO T1 (product_key) VALUES (102);
=> INSERT INTO T1 (product_key) VALUES (103);
=> ROLLBACK TO SAVEPOINT my_savepoint;
=> INSERT INTO T1 (product_key) VALUES (104);
=> COMMIT;
=> SELECT product_key FROM T1;
.
.
.
101
104
(2 rows)