跳到主要内容

TRANSACTION

描述

该语句用于开启事务。

数据库事务(Database Transaction)是指作为单个逻辑工作单元执行的一系列操作。事务处理可以用来维护数据库的完整性,保证成批的 SQL 操作全部执行或全部不执行。

显示事务是用户自定义或用户指定的事务。通过 BEGINBEGIN WORK(被作为 START TRANSACTION 的别名)语句显示开始,以 COMMITROLLBACK 语句显示结束。

语法

transaction_stmt:
START TRANSACTION [READ ONLY | READ WRITE];
| BEGIN [WORK];
| COMMIT [WORK];
| ROLLBACK [WORK];
| SET TRANSACTION {READ ONLY | READ WRITE};

参数解释

参数描述
START TRANSACTION [READ ONLY | READ WRITE]开启事务语句。一旦开启事务,则随后的 SQL 数据操作语句(即 INSERTUPDATEDELETE等)直到显式提交时才会生效。READ ONLY 表示事务是只读方式开启,事务内不允许执行修改操作。READ WRITE 表示事务是读写方式开启,默认就是此种模式。
BEGINBEGINBEGIN WORK 被作为 START TRANSACTION 的别名。
COMMIT提交当前事务。
ROLLBACK回滚当前事务。
SET TRANSACTION {READ ONLY | READ WRITE}将当前事务设置成 READ ONLY 或者 READ WRITE 模式。

示例

  • 假设现有表 a 如下所示。

    idnamenumsell_date
    1a1002013-06-21 10:06:43
    2b2002013-06-21 13:07:21
    3a502013-06-21 13:08:15
  1. 依次执行以下命令开始执行事务,将 id3name 改为 c,并插入一行当前卖出 a 的记录。

    START TRANSACTION;
    Query OK, 0 rows affectedaffected (0.011 sec)

    UPDATE a SET name = 'c' WHERE id = 3;
    Query OK, 1 rows affected (0.012 sec)

    INSERT INTO a VALUES (4, 'a', 30, '2013-06-21 16:09:13');
    Query OK, 1 rows affected (0.015 sec)

    COMMIT;
    Query OK, 0 rows affected (0.017 sec)
  2. 事务提交后,执行命令查看表 a 信息。

    SELECT * FROM a;

    结果如下:

    idnamenumsell_date
    1a1002013-06-21 10:06:43
    2b2002013-06-21 13:07:21
    3c502013-06-21 13:08:15
    4a302013-06-21 16:09:13
提示
  • 在事务还没有 COMMIT 之前,您可以查看下本事务中的操作是否已经生效。例如,可以在 COMMIT 前执行 SQL 语句 SELECT * FROM a;
  • 本事务 Session 的访问能读到最新的结果,本事务 Session 之外的访问结果肯定是没有生效,在事务还没有 COMMIT 前,之前做的操作除当前事务连接之外都是不可见的。
  • 如果想回滚该事务,直接用 ROLLBACK 代替 COMMIT