首批通过分布式安全可靠测评,为关键业务系统打造
回滚事务
更新时间:2026-03-16 15:34:43
本文介绍回滚事务的操作。
回滚一个事务指将事务的修改全部撤销,可以回滚当前整个未提交事务,也可以回滚到事务中任意一个保存点。
回滚整个事务
如果事务未提交,您可以使用 ROLLBACK 语句回滚整个事务。
回滚整个事务后:
所有的修改会被丢弃。
所有保存点被清除。
事务持有的所有锁被释放。
回滚整个事务的语法格式如下:
ROLLBACK;
以下示例通过 ROLLBACK 回滚当前事务的全部修改。
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 10003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
| 5 | CN | NULL | 2022-10-19 14:53:56 |
+----+------+-------+---------------------+
5 rows in set
obclient [test]> BEGIN;
Query OK, 0 rows affected
obclient [test]> INSERT INTO ordr(id, name, value) VALUES(6,'JP',10007);
Query OK, 1 row affected
obclient [test]> INSERT INTO ordr(id, name, value) VALUES(8,'FR',10008),(9,'RU',10009);
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 1003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
| 5 | CN | NULL | 2022-10-19 14:53:56 |
| 6 | JP | 10007 | 2022-10-19 14:58:24 |
| 8 | FR | 10008 | 2022-10-19 14:58:35 |
| 9 | RU | 10009 | 2022-10-19 14:58:35 |
+----+------+-------+---------------------+
8 rows in set
obclient [test]> ROLLBACK;
Query OK, 0 rows affected
obclient [test]> SELECT * FROM ordr;
+----+------+-------+---------------------+
| id | name | value | gmt_create |
+----+------+-------+---------------------+
| 1 | CN | 10001 | 2022-10-19 14:51:12 |
| 2 | US | 10002 | 2022-10-19 14:51:12 |
| 3 | EN | 1003 | 2022-10-19 14:51:12 |
| 4 | JP | NULL | 2022-10-19 14:51:44 |
| 5 | CN | NULL | 2022-10-19 14:53:56 |
+----+------+-------+---------------------+
5 rows in set
本示例中,通过 BEGIN 显示开启了一个事务,在未使用 COMMIT 显示提交事务前,所有修改只对当前会话可见,修改未持久化,可以使用 ROLLBACK 语句回滚修改。
回滚事务到某个保存点
如果事务设置了保存点,可以使用 ROLLBACK TO SAVEPOINT 语句回滚到某个保存点。事务保存点相关说明请参见 事务保存点。
回滚到某个保存点后:
事务不会结束。
保存点之前的修改被保留,保存点之后的修改被丢弃。
保存点之后的保存点(不包括保存点自身)被清除。
保存点之后事务持有的所有锁被释放。
回滚到某个保存点的语法格式如下:
ROLLBACK TO SAVEPOINT pointname;
其中,pointname 表示事务保存点的名称。
回滚事务到某个还原点详细示例及说明,请参见 回滚事务到某个保存点。