# 保存点
SAVEPOINT — 在当前事务中定义一个新的保存点
# 概要
SAVEPOINT savepoint_name
# 描述
保存点
在当前事务中建立一个新的保存点。
保存点是事务中的一个特殊标记,它允许在建立后执行的所有命令回滚,将事务状态恢复到保存点时的状态。
# 参数
保存点名称
赋予新保存点的名称。
# 笔记
采用回滚到
回滚到保存点。采用释放保存点
销毁保存点,保留建立后执行的命令的效果。
保存点只能在事务块内建立。一个事务中可以定义多个保存点。
# 例子
要建立一个保存点并稍后撤消建立后执行的所有命令的效果:
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 要求在建立另一个同名保存点时自动销毁一个保存点。在 PostgreSQL 中,旧的保存点被保留,尽管在回滚或释放时只会使用最近的保存点。(释放较新的保存点释放保存点
将导致旧的再次变得可访问回滚到保存点
和释放保存点
。) 否则,保存点
完全符合 SQL。