«

MySQL 事务隔离级别

时间:2026-10-7 07:21     作者:emer     分类: 无


MySQL 事务隔离级别

事务是数据库的重要特性,隔离级别决定了事务之间互相影响的程度。这篇讲清楚四个隔离级别。

1. 事务的 ACID 特性

2. 三个并发问题

脏读: 一个事务读到另一个事务还没提交的数据

不可重复读: 同一个事务内,两次读同一行数据结果不一样(被别的事务修改了)

幻读: 同一个事务内,两次查询返回的行数不一样(被别的事务插入/删除了)

3. 四个隔离级别

1)读未提交(Read Uncommitted)

2)读提交(Read Committed)

3)可重复读(Repeatable Read)

4)串行化(Serializable)

4. 查看和设置

-- 查看当前隔离级别
SELECT @@transaction_isolation;

-- 设置隔离级别(会话级别)
SET SESSION transaction_isolation = 'READ-COMMITTED';

-- 设置全局隔离级别
SET GLOBAL transaction_isolation = 'READ-COMMITTED';

5. InnoDB 的优化

MySQL InnoDB 在可重复读级别下,通过 MVCC(多版本并发控制)和间隙锁,也解决了幻读问题,比标准 SQL 定义的更强。

6. 实际开发怎么选

总结

隔离级别 脏读 不可重复读 幻读 性能
读未提交 有 有 有 最好
读提交 无 有 有 好
可重复读 无 无 无(InnoDB) 一般
串行化 无 无 无 最差

MySQL 默认可重复读,日常开发不用改,理解原理就行。

标签: MySQL 数据库 事务 隔离级别 InnoDB