易君召
发布于 2026-08-24 / 作者:易君召 / 3 阅读
0

MySQL 事务模式分析介绍

MySQL InnoDB 引擎下,事务相关分为:自动提交模式、事务隔离级别、事务访问模式(只读 / 读写)、保存点、隐式事务几个概念。

1. 自动提交模式 autocommit

控制 SQL 是否自动提交事务,默认开启 autocommit=ON

  • autocommit=1(ON):每条 DML 语句执行完自动提交,每条语句就是一个独立事务。

-- 查看
show variables like 'autocommit';
-- 关闭自动提交
set autocommit = 0;

autocommit 关闭后,必须手动 commit; / rollback;,否则变更只在当前会话。

手动开启事务另外两种写法:

START TRANSACTION; -- 开启事务,会临时忽略autocommit设置
BEGIN;             -- 等价 start transaction
-- 执行DML
COMMIT;   -- 提交
ROLLBACK; -- 回滚

2. 四大事务隔离级别(核心)

解决脏读、不可重复读、幻读问题,InnoDB 默认 REPEATABLE‑READ(可重复读),通过 MVCC 实现。

隔离级别

脏读

不可重复读

幻读

说明

READ UNCOMMITTED 读未提交

✅允许

✅允许

✅允许

几乎不用,可以读到其他事务未提交数据

READ COMMITTED 读已提交

❌禁止

✅允许

✅允许

Oracle 默认,只能读到别人已经提交的数据

REPEATABLE READ 可重复读

❌禁止

❌禁止

InnoDB 通过间隙锁规避

MySQL InnoDB 默认,同一事务多次读取结果一致

SERIALIZABLE 串行化

❌禁止

❌禁止

❌禁止

最高级别,全部加共享锁,性能差

设置隔离级别:

-- 会话级别
set session transaction isolation level read committed;
-- 全局级别
set global transaction isolation level repeatable read;

3. 事务访问模式(读写 / 只读模式)

MySQL 支持显式指定事务是读写还是只读,只读事务优化内部性能。

-- 读写事务(默认)
START TRANSACTION READ WRITE;

-- 只读事务,只能select,不能DML,InnoDB做性能优化
START TRANSACTION READ ONLY;
COMMIT;

注意:READ ONLY 事务中执行增删改会报错。

4. 保存点 SAVEPOINT(部分回滚)

事务内部设置回滚点,不用全部回滚,只回滚到某个保存点。

START TRANSACTION;
insert into t values(1);
SAVEPOINT sp1;
insert into t values(2);
ROLLBACK TO sp1; -- 回滚到sp1,value=2被撤销,value=1保留
COMMIT;
RELEASE SAVEPOINT sp1; -- 删除保存点

5. 隐式事务

  1. DDL 语句 (create/drop/alter) 会隐式提交当前打开的事务,DDL 本身无法回滚。

  2. 部分语句会触发隐式提交:LOCK TABLESUNLOCK TABLES

补充:事务的提交模式(completion_type)

completion_type 控制 commit 行为:

  • 0:默认,commit 直接提交;

  • 1COMMIT 等价 COMMIT AND CHAIN,提交后立刻开启新事务;

  • 2COMMIT 等价 COMMIT AND RELEASE,提交后断开会话。

show variables like 'completion_type';

总结

日常开发最常接触:

  1. autocommit 自动提交开关;

  2. 4 种隔离级别;

  3. start transaction / begin / commit / rollback;

  4. savepoint 部分回滚;

  5. read only 只读事务。


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/mysql-transaction-modes-analysis-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/