首批通过分布式安全可靠测评,为关键业务系统打造
回滚事务
更新时间:2026-04-07 10:58:34
回滚一个事务是指将事务的修改全部撤销,可以回滚当前整个未提交事务,也可以回滚到事务中任意一个保存点。
回滚整个事务
如果事务未提交,您可以使用 ROLLBACK 语句回滚整个事务。
回滚整个事务后:
所有的修改会被丢弃。
所有保存点被清除。
事务持有的所有锁被释放。
语句语法格式如下:
ROLLBACK;
以下示例通过 ROLLBACK 回滚当前事务的全部修改。
obclient> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
+----+------+-------+------------+
3 rows in set
obclient [SYS]> BEGIN;
Query OK, 0 rows affected
obclient [SYS]> INSERT INTO ordr(id, name, value) VALUES(4,'JP',10004);
Query OK, 1 row affected
obclient [SYS]> INSERT INTO ordr(id, name, value) VALUES(5,'FR',10005),(6,'RU',10006);
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0
obclient [SYS]> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
| 4 | JP | 10004 | 03-NOV-22 |
| 5 | FR | 10005 | 03-NOV-22 |
| 6 | RU | 10006 | 03-NOV-22 |
+----+------+-------+------------+
6 rows in set
obclient> ROLLBACK;
Query OK, 0 rows affected
obclient> SELECT * FROM ordr;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10001 | 03-NOV-22 |
| 2 | US | 10002 | 03-NOV-22 |
| 3 | EN | 10003 | 03-NOV-22 |
+----+------+-------+------------+
3 rows in set
本示例中,通过 BEGIN 显示开启了一个事务,在未使用 COMMIT 显示提交事务前,所有修改只对当前会话可见,修改未持久化,可以使用 ROLLBACK 语句回滚修改。
回滚到某个保存点
如果事务设置了保存点,可以使用 ROLLBACK TO SAVEPOINT 语句回滚到某个保存点。事务保存点相关说明请参见 事务保存点。
说明
DBLink 写支持 SAVEPOINT 功能,允许执行事务回滚到指定的保存点。有关 DBLink 写相关信息,请参见 通过 DBLink 修改远端数据库中的数据。
回滚事务到某个保存点后:
事务不会结束。
保存点之前的修改被保留,保存点之后的修改被丢弃。
保存点之后的保存点(不包括保存点自身)被清除。
保存点之后事务持有的所有锁被释放。
回滚到某个保存点的语法格式如下:
ROLLBACK TO SAVEPOINT pointname;
其中,pointname 表示事务保存点的名称。
回滚事务到某个还原点详细示例及说明,请参见 回滚事务到某个保存点。