MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

MySQL 事务和锁相关语句全解


MySQL 通过 SET autocommit、START TRANSACTION、COMMIT 和 ROLLBACK 语句支持本地事务(基于 client 的 session);除此之外,XA 事务支持 MySQL 分布式事务。

START TRANSACTION、COMMIT 和 ROLLBACK 语句

下列语句提供了对事务的控制:

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}

START TRANSACTIONBEGIN 语句开启新的事务。

COMMIT 语句提交当前事务,使其变更永久生效。

ROLLBACK 回滚当前事务,取消其更改。

SET autocommit 禁用或启用当前会话的默认自动提交模式。

SAVEPOINT、ROLLBACK TO SAVEPOINT 和 RELEASE SAVEPOINT 语句

InnoDB 引擎支持 SQL 语句,SAVEPOINT、ROLLBACK TO SAVEPOINT、RELEASE SAVEPOINT 和 可选项 WORK 关键字进行回滚。

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

LOCK TABLES 和 UNLOCK TABLES 语句

MySQL 允许 client 通过会话显性地锁表和解锁表,加锁用 LOCK 关键字,解锁用 UNLOCK 关键字。

LOCK TABLES
    tbl_name [[AS] alias] lock_type
    [, tbl_name [[AS] alias] lock_type] ...

lock_type: {
    READ [LOCAL]
  | [LOW_PRIORITY] WRITE
}

UNLOCK TABLES

SET TRANSACTION 语句

SET TRANSACTION 语句指定表的事务特性,多个事务特征用逗号进行隔开;每个事务特性包括事务隔离级别或访问模式。事务的隔离级别作用于 InnoDB 引擎,访问模式表示事务是以读/写还是只读模式运行。

SET [GLOBAL | SESSION] TRANSACTION
    transaction_characteristic [, transaction_characteristic] ...

transaction_characteristic: {
    ISOLATION LEVEL level
  | access_mode
}

level: {
     REPEATABLE READ
   | READ COMMITTED
   | READ UNCOMMITTED
   | SERIALIZABLE
}

access_mode: {
     READ WRITE
   | READ ONLY
}

XA 事务

InnoDB 存储引擎支持 XA 事务,MySQL XA 事务实现是基于 X/Open CAE “分布式事务处理:XA 规范”。

XA {START|BEGIN} xid [JOIN|RESUME]

XA END xid [SUSPEND [FOR MIGRATE]]

XA PREPARE xid

XA COMMIT xid [ONE PHASE]

XA ROLLBACK xid

XA RECOVER [CONVERT XID]