Skip to content
作者:daily5am创建:-更新:-
字数:预计阅读: 分钟访问量:--

MySQL事务隔离级别和MVCC

MySQL的事务隔离级别和MVCC机制是保证数据一致性的重要机制。

核心问题

事务的ACID特性

  1. 原子性(Atomicity):事务要么全部成功,要么全部失败
  2. 一致性(Consistency):事务前后数据保持一致
  3. 隔离性(Isolation):事务之间相互隔离
  4. 持久性(Durability):事务提交后数据持久化

事务隔离级别

  1. READ UNCOMMITTED:读未提交

    • 可能出现脏读、不可重复读、幻读
  2. READ COMMITTED:读已提交

    • 避免脏读,可能出现不可重复读、幻读
  3. REPEATABLE READ:可重复读(MySQL默认)

    • 避免脏读、不可重复读,可能出现幻读
  4. SERIALIZABLE:串行化

    • 避免所有问题,但性能最低

MVCC(多版本并发控制)

实现原理:

  • 每行数据有隐藏的版本号字段
  • 通过undo log保存历史版本
  • ReadView决定可见的版本

关键组件:

  • undo log:保存历史版本
  • ReadView:决定可见性
  • 版本链:通过指针连接历史版本

常见面试题

  1. 脏读、不可重复读、幻读的区别?

    • 脏读:读取到未提交的数据
    • 不可重复读:同一事务内读取结果不一致
    • 幻读:读取到新插入的数据
  2. MVCC如何解决幻读?

    • 使用Next-Key Lock
    • 锁定范围,防止插入
  3. MySQL的锁机制?

    • 表锁:锁定整个表
    • 行锁:锁定特定行
    • 间隙锁:锁定范围