Skip to content

fix(database): 修正 MySQL MVCC机制描述中的概念错误#2849

Open
LeoPlus1024 wants to merge 1 commit intoSnailclimb:mainfrom
LeoPlus1024:fix-mvcc-describle
Open

fix(database): 修正 MySQL MVCC机制描述中的概念错误#2849
LeoPlus1024 wants to merge 1 commit intoSnailclimb:mainfrom
LeoPlus1024:fix-mvcc-describle

Conversation

@LeoPlus1024
Copy link
Copy Markdown

@LeoPlus1024 LeoPlus1024 commented May 8, 2026

fix(database): 修正 MySQL MVCC机制描述中的概念错误

  1. 问题描述 (Issue Description)
    在 docs/database/mysql/innodb-implementation-of-mvcc.md(请根据实际文件路径确认)中,关于 MVCC 修改操作的描述存在严重的概念性错误。

原文错误描述:

“当一个事务要对数据库中的数据进行修改时,MVCC 会为该事务创建一个数据快照,而不是直接修改实际的数据行。”

错误原因:
该描述混淆了 MVCC(读视图) 与 InnoDB 存储引擎底层更新机制。

  • InnoDB 采用的是 原地更新(Update-in-Place) 机制,UPDATE 操作会直接修改聚簇索引中的当前数据行。
  • MVCC 的核心在于读操作不加锁,通过 Undo Log 保留旧版本数据,配合 ReadView 实现一致性读,而非“写时不修改原数据”。
  • 如果写操作不修改实际数据行,DB_TRX_ID 和 DB_ROLL_PTR 将无法正确更新,MVCC 版本链也将无法建立。
  1. 修改建议 (Proposed Changes)
    建议将错误段落替换为符合 MySQL 官方文档及 InnoDB 源码逻辑的正确描述。

修改前

当一个事务要对数据库中的数据进行修改时,MVCC 会为该事务创建一个数据快照,而不是直接修改实际的数据行。

修改后

当一个事务对数据进行修改时,InnoDB 会**直接更新当前数据行**(原地更新),并将**旧版本数据保存到 Undo Log** 中。其他事务在进行快照读(Snapshot Read)时,会根据 **ReadView** 和 **Undo Log** 中的版本链,读取到该数据在某一时刻的一致性视图,从而避免读操作被写操作阻塞。
  1. 参考依据 (References)

  2. MySQL Official Documentation: InnoDB Multi-Versioning

"InnoDB uses the information in the rollback segment to perform the undo operations... It also uses them to generate earlier versions of rows for a consistent read."

  1. MySQL Official Documentation:Clustered and Secondary Indexes

"When you update a row in InnoDB, the clustered index record is updated in place."

3.《高性能 MySQL》: 明确指出 InnoDB 将当前版本存储在聚簇索引中,旧版本存储在 Undo Log 中。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant