在当前事务中定义新保存点。

语法

SAVEPOINT savepoint_name

说明

SAVEPOINT 在当前事务中建立新保存点。

保存点是指事务中的特殊标记,它允许回滚在建立它之后执行的所有命令,以将事务状态恢复到保存点时刻的状态。

参数

参数 说明
savepoint_name 为保存点给出的名称。

注释

使用 ROLLBACK TO SAVEPOINT 可回滚到保存点。

只能在事务块中建立保存点。可以在一个事务中定义多个保存点。

在建立与前一个保存点同名的另一个保存点后,会保留旧保存点,但在回滚时仅使用更新的保存点。

在 SPL 程序中不支持 SAVEPOINT

示例

建立保存点,并在之后撤消在建立它之后执行的所有命令的影响:

\set AUTOCOMMIT off
INSERT INTO dept VALUES (50, 'HR', 'NEW YORK');
SAVEPOINT depts;
INSERT INTO emp (empno, ename, deptno) VALUES (9001, 'JONES', 50);
INSERT INTO emp (empno, ename, deptno) VALUES (9002, 'ALICE', 50);
SAVEPOINT emps;
INSERT INTO jobhist VALUES (9001,'17-SEP-07',NULL,'CLERK',800,NULL,50,'New Hire');
INSERT INTO jobhist VALUES (9002,'20-SEP-07',NULL,'CLERK',700,NULL,50,'New Hire');
ROLLBACK TO depts;
COMMIT;

以上事务会将一行提交到 dept 表中,但插入 emp 和 jobhist 表的内容会被回滚。