109 lines
2.6 KiB
Markdown
109 lines
2.6 KiB
Markdown
回滚事务
|
|
=========================
|
|
|
|
使用 `ROLLBACK` 语句回滚事务。
|
|
|
|
回滚一个事务指将事务的修改全部撤销。可以回滚当前整个未提交的事务,也可以回滚到事务中任意一个保存点。如果要回滚到某个保存点,必须结合使用 `ROLLBACK` 和 `TO SAVEPOINT` 语句。
|
|
|
|
其中:
|
|
|
|
* 如果回滚整个事务,则:
|
|
|
|
* 事务会结束
|
|
|
|
|
|
|
|
* 所有的修改会被丢弃
|
|
|
|
|
|
|
|
* 清除所有保存点
|
|
|
|
|
|
|
|
* 释放事务持有的所有锁
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* 如果回滚到某个保存点,则:
|
|
|
|
* 事务不会结束
|
|
|
|
|
|
|
|
* 保存点之前的修改被保留,保存点之后的修改被丢弃
|
|
|
|
|
|
|
|
* 清除保存点之后的保存点(不包括保存点自身)
|
|
|
|
|
|
|
|
* 释放保存点之后事务持有的所有锁
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
示例如下:
|
|
|
|
回滚事务的全部修改:
|
|
|
|
```sql
|
|
obclient> SELECT * FROM t_insert;
|
|
+----+------+-------+---------------------+
|
|
| ID | NAME | VALUE | GMT_CREATE |
|
|
+----+------+-------+---------------------+
|
|
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
|
|
| 2 | US | 10002 | 2020-04-02 17:52:38 |
|
|
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
|
|
+----+------+-------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
|
|
obclient> INSERT INTO t_insert(id, name, value) VALUES(4,'JP',10004);
|
|
Query OK, 1 row affected (0.00 sec)
|
|
|
|
obclient> INSERT INTO t_insert(id, name, value) VALUES(5,'FR',10005),(6,'RU',10006);
|
|
Query OK, 2 rows affected (0.00 sec)
|
|
Records: 2 Duplicates: 0 Warnings: 0
|
|
|
|
obclient> SELECT * FROM t_insert;
|
|
+----+------+-------+---------------------+
|
|
| ID | NAME | VALUE | GMT_CREATE |
|
|
+----+------+-------+---------------------+
|
|
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
|
|
| 2 | US | 10002 | 2020-04-02 17:52:38 |
|
|
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
|
|
| 4 | JP | 10004 | 2020-04-02 17:53:34 |
|
|
| 5 | FR | 10005 | 2020-04-02 17:54:53 |
|
|
| 6 | RU | 10006 | 2020-04-02 17:54:53 |
|
|
+----+------+-------+---------------------+
|
|
6 rows in set (0.00 sec)
|
|
|
|
|
|
obclient> ROLLBACK;
|
|
Query OK, 0 rows affected (0.00 sec)
|
|
|
|
obclient> SELECT * FROM t_insert;
|
|
+----+------+-------+---------------------+
|
|
| ID | NAME | VALUE | GMT_CREATE |
|
|
+----+------+-------+---------------------+
|
|
| 1 | CN | 10001 | 2020-04-02 17:52:31 |
|
|
| 2 | US | 10002 | 2020-04-02 17:52:38 |
|
|
| 3 | EN | 10003 | 2020-04-02 17:52:38 |
|
|
|
|
+----+------+-------+---------------------+
|
|
3 rows in set (0.00 sec)
|
|
```
|
|
|
|
|
|
|
|
更多事务控制语句相关的说明请参见 [关于事务控制语句](../../7.developer-guide-1/3.about-dml-statements-and-transactions/2.about-transactional-control-statements.md)。
|