MVCC通过为数据保留多个历史版本,使事务基于启动时刻的一致性快照读取,实现读写互不阻塞;其依赖版本链、Read View和DB_TRX_ID/DB_ROLL_PTR等隐藏字段,避免锁冲突,提升并发性能。
MVCC 的核心思想是:为数据保留多个历史版本,让每个事务基于自身启动时刻看到一个一致性的快照,从而实现读写互不阻塞。
每次更新或删除一行时,InnoDB 不直接覆盖原有记录,而是生成一个新版本,并用 DB_ROLL_PTR 指针把新旧版本串联成一条“版本链”。原始数据依然保留,供其他事务按需读取。
事务开始时,数据库会记录一个“一致性视图”(Read View),其中包含当时活跃事务 ID 列表和最小/最大事务 ID。后续所有 SELEC

InnoDB 自动为每行添加三个关键隐藏列:
在纯锁方案中:
MVCC 绕开了这个冲突:读走历史版本,写建新版本,双方无需等待对方释放锁,显著提升并发吞吐量,尤其适合读多写少的业务场景。