【Java面试笔记:应用】36.谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
MySQL的事务隔离级别、悲观锁和乐观锁是处理并发操作和数据一致性的核心机制。
1. MySQL事务隔离级别
MySQL遵循SQL标准定义了四种事务隔离级别,隔离性从低到高排序,不同级别在并发问题(脏读、不可重复读、幻读)和性能之间权衡。
1. 读未提交(Read Uncommitted)
- 特点:允许事务读取其他未提交事务的修改。
- 问题:允许脏读(
Dirty Read
)、不可重复读(Non-Repeatable Read
)、幻读(Phantom Read
)。
2. 读已提交(Read Committed)
- 特点:事务只能读取其他已提交事务的修改。
- 解决的问题:避免脏读。
- 问题:允许不可重复读、幻读。
- 实现:基于锁或
MVCC(如Oracle)
。
3. 可重复读(Repeatable Read,MySQL默认)
- 特点:保证同一事务多次读取的数据一致。
- 解决的问题:避免脏读、不可重复读。
- 实现:InnoDB通过MVCC和间隙锁(
Gap Lock
)避免幻读。 - 注意:MySQL在可重复读级别下实际避免了幻读(与SQL标准不同)。
4. 串行化(Serializable)
- 特点:事务串行执行,完全隔离。
- 解决的问题:避免脏读、不可重复读、幻读。
- 代价:性能最低,通过共享锁、排他锁、区间锁实现。
5. 隔离级别对比
隔离级别 | 脏读 | 不可重复读 | 幻读 | 实现机制 |
---|