MVCC通过为数据保留多个历史版本,使事务基于启动时刻的一致性快照读取,实现读写互不阻塞;其依赖版本链、Read View和DB_TRX_ID/DB_ROLL_PTR等隐藏字段,避免锁冲突,提升并发性能。

MVCC 的核心思想是:为数据保留多个历史版本,让每个事务基于自身启动时刻看到一个一致性的快照,从而实现读写互不阻塞。
多版本共存,不覆盖原数据
每次更新或删除一行时,InnoDB 不直接覆盖原有记录,而是生成一个新版本,并用 DB_ROLL_PTR 指针把新旧版本串联成一条“版本链”。原始数据依然保留,供其他事务按需读取。
快照读与事务隔离绑定
事务开始时,数据库会记录一个“一致性视图”(Read View),其中包含当时活跃事务 ID 列表和最小/最大事务 ID。后续所有 SELECT 都依据这个视图判断哪些版本可见——只读取在该视图下“已提交且可见”的版本。
隐藏字段支撑版本管理
InnoDB 自动为每行添加三个关键隐藏列:
华友协同办公管理系统(华友OA),基于微软最新的.net 2.0平台和SQL Server数据库,集成强大的Ajax技术,采用多层分布式架构,实现统一办公平台,功能强大、价格便宜,是适用于企事业单位的通用型网络协同办公系统。 系统秉承协同办公的思想,集成即时通讯、日记管理、通知管理、邮件管理、新闻、考勤管理、短信管理、个人文件柜、日程安排、工作计划、工作日清、通讯录、公文流转、论坛、在线调查、
- DB_TRX_ID:标记最后一次修改该行的事务 ID
- DB_ROLL_PTR:指向 Undo Log 中前一版本的位置,构成版本链
- DB_ROW_ID(非主键表中用作隐式主键,辅助唯一性)
解决传统锁机制的根本痛点
在纯锁方案中:
- 读操作加 S 锁 → 阻塞写操作的 X 锁
- 写操作加 X 锁 → 阻塞其他事务的 S 锁
MVCC 绕开了这个冲突:读走历史版本,写建新版本,双方无需等待对方释放锁,显著提升并发吞吐量,尤其适合读多写少的业务场景。









