GBase8s数据库ROLLBACK 语句TO SAVEPOINT 子句

可选的 TO SAVEPOINT 子句指定部分回滚。此子句可将回滚的范围限定到在 ROLLBACK 语句

与指定的或缺省的保存点之间的当前保存点级别的操作。如果在 SAVEPOINT 关键字之后未指定

savepoint,则回滚终止在当前保存点级别之内的最近设置保存点。

当 ROLLBACK WORK TO SAVEPOINT 语句执行成功时,在保存点之前的 DDL 和 DML 语句

的任何影响依然保持,但取消通过跟在保存点之后的语句对数据库的模式的更改或对其数据值的更

改。这些取消了的语句所需要的任何锁依然保持,但在事务末尾被释放。销毁在指定的保存点与

ROLLBACK 语句之间的任何保存点,但通过 ROLLBACK 语句引用的保存点(以及在被引用的保

存点之前的任何保存点)继续存在。程序控制传递到紧跟在 ROLLBACK 语句之后的语句。

如果省略 TO SAVEPOINT 子句,则 ROLLBACK 语句回滚整个事务,以及被释放的事务之内的

所有保存点。

如果在当前的事务中指定的 savepoint 不存在,则数据库服务器发出例外。

在紧跟在 TRUNCATE 语句之后的 ROLLBACK 语句中,TO SAVEPOINT 子句是无效的。在此

情况下,尝试进行的部分回滚失败并报错。要取消 TRUNCATE 语句已经对表造成的未提交的更

改,请发出 ROLLBACK WORK 作为下一语句,但不带 TO SAVEPOINT 子句。

下列程序片断将当前的事务会滚到名为 pt109 的保存点:

BEGIN WORK;

DROP TABLE tab03;

CREATE TABLE tab03 (col1 CHAR(24), col2 DATE);

SAVEPOINT pt108;

INSERT INTO tab03 VALUES (‘First day of autumn’, ‘09/23/2012’);

SAVEPOINT pt109;

DELETE FROM tab03 WHERE col2 < ‘12/09/2009’;

SAVEPOINT pt110;

ROLLBACK TO SAVEPOINT pt109;

在此示例中的 ROLLBACK 语句有这些作用:

1、取消删除 col2 日期值早于 2009 年 12 月 9 日的任何行的 DML 操作。

2、释放保存点 pt110,以及在 pt109 与 ROLLBACK 语句之间的任何其他保存点。

3、取消当前事务之内按照 SQL 语句的词典顺序跟在保存点 pt109 之后的操作对数据库的任何其他更改

然而,不释放保存点 pt108,因为在该事务中它被设置早于 pt109。未被此部分回滚取消的是,在

设置了 pt109 保存点之前该事务的任何未提交的 DDL 或 DML 操作的影响,包括表 tab03 的创

建以及向那个表添加行的 INSERT 操作。这些会在部分回滚之后依然保持,将另一部分回滚的可

能性挂起到保存点,以及整个事务的最终提交或回滚。

相关的语句

相关的语句:BEGIN WORK 语句、COMMIT WORK 语句、RELEASE SAVEPOINT 语句 和

SAVEPOINT 语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值