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 TRANSACTION 或 BEGIN 语句开启新的事务。
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]