温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

为何MVCC叫多版本

发布时间:2026-09-30 09:47:16 来源:亿速云 阅读:99 作者:小樊 栏目:数据库

MVCC 全称是 Multi-Version Concurrency Control,中文常翻译为「多版本并发控制」。它之所以叫“多版本”,核心原因可以一句话概括:

同一行数据在数据库中会同时存在多个版本,而不是只有最新的一份。

下面拆开说就很好理解了。


1. 传统方式:只有“一个版本”

在不用 MVCC 的数据库里,更新一行数据通常是:

  • 直接把旧值覆盖成新值
  • 别的事务要么等锁,要么读不到

也就是说,数据只有“当前版本”。


2. MVCC 方式:保留“多个版本”

以 MySQL InnoDB 为例:

  • 每行数据有隐藏字段:DB_TRX_ID(创建/修改该版本的事务 ID)、DB_ROLL_PTR(回滚指针)
  • 更新数据时:
    • 不会直接覆盖旧值
    • 而是生成一个新版本
    • 旧版本通过 undo log 保留下来

于是同一行记录可能长这样:

  • 版本1:事务10写入(原始值)
  • 版本2:事务20修改(新值)
  • 版本3:事务30再修改(最新值)

这些版本在某一时刻同时存在。


3. “多版本”解决了什么问题?

因为有多份版本,数据库可以:

  • 读事务看到它自己应该看到的那个版本
  • 写事务继续写新版本
  • 读写互不阻塞

例如:

  • 事务A在早上9点读
  • 事务B在9点01分改
  • 事务A仍然读到9点时的旧版本(快照)

这就是“一致性读(快照读)”。


4. 所以叫“多版本”的原因总结

MVCC 叫多版本,是因为:

  1. 数据不是覆盖式更新
  2. 历史版本被保留
  3. 不同事务可能看到不同版本
  4. 并发控制依赖版本链,而不是单纯加锁

一句话记忆

MVCC 的“多版本” = 一行数据有多个时间点的副本,事务按版本看数据。

如果你愿意,我也可以顺手用「小明改简历」这种生活例子再讲一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手