回滚一个事务指将事务的修改全部撤销。可以回滚当前整个未提交的事务,也可以回滚到事务中任意一个保存点。如果要回滚到某个保存点,必须结合使用 ROLLBACK 和 TO SAVEPOINT 语句。

    其中:

    • 如果回滚整个事务,则:

      • 事务会结束

      • 所有的修改会被丢弃

      • 清除所有保存点

      • 释放事务持有的所有锁

    • 如果回滚到某个保存点,则:

      • 事务不会结束

      • 保存点之前的修改被保留,保存点之后的修改被丢弃

      • 清除保存点之后的保存点(不包括保存点自身)

      • 释放保存点之后事务持有的所有锁

    示例如下:

    回滚事务的全部修改:

    1. obclient> SELECT * FROM t_insert;
    2. +----+------+-------+---------------------+
    3. | ID | NAME | VALUE | GMT_CREATE |
    4. +----+------+-------+---------------------+
    5. | 1 | CN | 10001 | 2020-04-02 17:52:31 |
    6. | 2 | US | 10002 | 2020-04-02 17:52:38 |
    7. | 3 | EN | 10003 | 2020-04-02 17:52:38 |
    8. +----+------+-------+---------------------+
    9. 3 rows in set (0.00 sec)
    10. obclient> INSERT INTO t_insert(id, name, value) VALUES(4,'JP',10004);
    11. Query OK, 1 row affected (0.00 sec)
    12. obclient> INSERT INTO t_insert(id, name, value) VALUES(5,'FR',10005),(6,'RU',10006);
    13. Query OK, 2 rows affected (0.00 sec)
    14. Records: 2 Duplicates: 0 Warnings: 0
    15. obclient> SELECT * FROM t_insert;
    16. +----+------+-------+---------------------+
    17. | ID | NAME | VALUE | GMT_CREATE |
    18. +----+------+-------+---------------------+
    19. | 1 | CN | 10001 | 2020-04-02 17:52:31 |
    20. | 2 | US | 10002 | 2020-04-02 17:52:38 |
    21. | 3 | EN | 10003 | 2020-04-02 17:52:38 |
    22. | 4 | JP | 10004 | 2020-04-02 17:53:34 |
    23. | 5 | FR | 10005 | 2020-04-02 17:54:53 |
    24. | 6 | RU | 10006 | 2020-04-02 17:54:53 |
    25. +----+------+-------+---------------------+
    26. 6 rows in set (0.00 sec)
    27. obclient> ROLLBACK;
    28. Query OK, 0 rows affected (0.00 sec)
    29. obclient> SELECT * FROM t_insert;
    30. +----+------+-------+---------------------+
    31. | ID | NAME | VALUE | GMT_CREATE |
    32. +----+------+-------+---------------------+
    33. | 1 | CN | 10001 | 2020-04-02 17:52:31 |
    34. | 2 | US | 10002 | 2020-04-02 17:52:38 |
    35. | 3 | EN | 10003 | 2020-04-02 17:52:38 |
    36. +----+------+-------+---------------------+
    37. 3 rows in set (0.00 sec)

    更多事务控制语句相关的说明请参见 关于事务控制语句