ROLLBACK¶
说明¶
回滚一个事务或回滚到某个保存点
参数¶
WORK
表示回滚一个事务。此参数没有意义。
TRANSACTION
表示回滚一个事务。此参数没有意义。
savepoint_name
要回滚到某个保存点时该保存点的名字。
注解
如果此时不在一个事务中,或者保存点不存在,将导致出错。
当回滚整个事务时,与语句 ABORT; 的效果相同,都可以消除事务中的动作对数据库产生的影响。当回滚到某个保存点时,将消除这个保存点之后的动作对数据库产生的影响。
若DDLCOMMITBEHAVIOR配置参数为0,且当前位于显性事务中,DDL语句执行将会自动提交先前事务,通过单独事务完成DDL操作,并最后自动开启新的事务。即显性事务中DDL操作分三个过程:COMMIT、DDL、BEGIN,且最终事务不继承原有事务的属性。
示例¶
示例1: 回滚事务
-- 清理环境
DROP TABLE tab1 CASCADE;
-- 创建表并插入数据
CREATE TABLE tab1 (a INT);
INSERT INTO tab1 VALUES(100);
INSERT INTO tab1 VALUES(200);
SELECT * FROM tab1 ORDER BY a;
A(int) |
------------
100 |
------------
200 |
总数目:2
-- 开始事务
BEGIN;
INSERT INTO tab1 VALUES(300);
-- 表中有 3 条数据
SELECT * FROM tab1 ORDER BY a;
A(int) |
------------
100 |
------------
200 |
------------
300 |
总数目:3
-- 设置保存点 sp1
SAVEPOINT sp1;
INSERT INTO tab1 VALUES(400);
-- 表中有 4 条数据
SELECT * FROM tab1 ORDER BY a;
A(int) |
------------
100 |
------------
200 |
------------
300 |
------------
400 |
总数目:4
-- 回滚到保存点 sp1
ROLLBACK TO sp1;
-- 表中有 3 条数据
SELECT * FROM tab1 ORDER BY a;
A(int) |
------------
100 |
------------
200 |
------------
300 |
总数目:3
-- 回滚整个事务
ROLLBACK;
-- 表中有 2 条数据
SELECT * FROM tab1 ORDER BY a;
A(int) |
------------
100 |
------------
200 |
总数目:2
-- 删除表
DROP TABLE tab1;