# 保存点

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。

# 也可以看看

开始,犯罪,释放保存点,回滚,回滚到保存点