Lazy loaded image
什么是MVCC?
Words 277Read Time≈ 1 min
2026-10-11
type
Post
status
Published
date
Oct 11, 2026
slug
mvcc
summary
tags
技术探索
category
手写
icon
password
MVCC 是多版本并发控制,通过保留历史版本,让事务读取对自己可见的数据,减少读写之间的锁竞争。
在 InnoDB 中,主要靠 事务 ID、undo log 版本链和 ReadView 实现:事务 ID 标识版本由谁修改,undo log 支持重建旧版本,ReadView 判断版本是否可见;当前版本不可见,就沿版本链找旧版本。
主要用于解决脏读、可重复读、幻读问题。

脏读、可重复读、幻读分别是什么?

问题
什么现象
怎么解决
脏读
读到其他事务尚未提交的数据
通过 MVCC 排除其他事务未提交的版本。
不可重复读
别人提交更新后,自己两次读取同一行,值不同
快照读复用同一个 ReadView,保持读取同一快照。
幻读
别人增删数据后,相同条件查询的结果多了或少了行
范围加锁读靠 Next-key Lock 锁住记录和间隙。
 
回到首页