返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

ROLLBACK TO SAVEPOINT

发布于 2019-09-30 03:11:42 字数 1504 浏览 912 评论 0 收藏 0

名称

ROLLBACK TO SAVEPOINT--回滚到一个保存点

语法

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

描述

回滚所有指定保存点建立之后执行的命令。保存点仍然有效,并且需要时可以再次回滚到该点。

ROLLBACK TO SAVEPOINT 隐含地删除所有在该保存点之后建立的保存点。

参数

savepoint_name

回滚截至的保存点

注意

使用 RELEASE SAVEPOINT 删除一个保存点,而不会抛弃这个保存点建立之后执行的命令结果。

声明一个还没有建立的保存点名字是一个错误。

在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个 FETCH 命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在 FETCH 让它指向的位置(也就是 FETCH 不会被回滚)。关闭一个游标的行为也不会被回滚给撤消掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用 ROLLBACK TO SAVEPOINT 重新恢复,但是游标不能再使用了。

例子

撤销 my_savepoint 建立之后执行的命令的影响:

ROLLBACK TO SAVEPOINT my_savepoint;

游标位置不受保存点回滚的影响:

BEGIN;

DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column? 
----------
        1

ROLLBACK TO SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column? 
----------
        2

COMMIT;

兼容性

SQL 标准声明关键字 SAVEPOINT 是必须的。PostgreSQL 和 Oracle 允许省略 TRANSACTION 关键字。SQL 只允许 WORK 作为 ROLLBACK 后面的无意义关键字。还有,SQL 有一个可选的 AND [ NO ] CHAIN 子句,目前 PostgreSQL 还不支持。否则,这个命令完全兼容 SQL 标准。

又见

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文