InnoDB 的 MVCC(多版本并发控制)主要用于实现非锁定读取,即在读取数据时无需加共享锁,从而提高并发性能。其核心原理包括两个部分:
Read View:
当事务启动时,InnoDB 为该事务构建一个 Read View,它记录了当前所有活跃事务的状态以及最小的事务 ID。之后,事务在读取数据时,只能看到在自己启动前已提交的数据版本,这样就能确保读到的一致性“快照”。Undo Log:
每当事务对数据行进行修改时,InnoDB 会在 undo log 中记录该行的旧版本数据。当其他事务需要读取这行数据时,如果发现数据已被更新且当前版本对它不可见,系统会通过 undo log 回溯到适合当前事务 Read View 的旧版本,从而实现一致性读。
通过这两者的配合,InnoDB 即使在数据被频繁修改的情况下,也能保证每个事务读取到的数据是稳定一致的“历史快照”,从而避免幻读等并发问题。