尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

MVCC 机制(RC / RR 的真正区别)

MVCC 机制(RC / RR 的真正区别)
📅 发布时间:2026/6/18 21:52:23

🧨 先一句话总纲:

RC 每次 SELECT 都重新生成 ReadView(看最新已提交)
RR 一个事务只生成一次 ReadView(看固定快照)

区别就这一个点。
所有连锁反应,包括“不可重复读”怎么来的,都从这里推出来,简单清晰。


🔥 1. MVCC 是怎么实现的(版本链动画)

InnoDB 在每行加两个隐藏字段:

trx_id        # 最新更新这行的事务ID
roll_pointer  # 指向 undo log(老版本记录)

用这些 Undo 一条条串起来,就形成 “版本链”:

最新版本 → 上一版本 → 再上一版本 → ...trx_id=20       trx_id=15       trx_id=8

🎬 2. ReadView 是 MVCC 的灵魂

ReadView 本质是一张“我能看到哪些事务的提交”的白名单。

包含 4 个关键字段:

m_ids:当前未提交事务ID集合
min_trx_id
max_trx_id
creator_trx_id

你不需要死记这些字段,只要知道:

关键逻辑:

当一个事务在读一行时,InnoDB 会从版本链里往上找:

找第一个 “我有权限读取” 的版本

权限判断规则非常简单:

  • 版本的 trx_id 已提交 → ✔ 可读
  • 版本的 trx_id 未提交 → ❌ 跳过
  • 版本的 trx_id 是自己事务 → ✔ 可读

🧨 3. RC 与 RR 差异:关键是 ReadView 何时生成

这个点你一定要牢牢抓住:

⭐ RC(Read Committed)

每次 SELECT 都重新生成 ReadView

意味着:

同一个事务中的两次 SELECT 看到的数据可能不一样

这导致:

  • 不可重复读(Non-repeatable read)

⭐ RR(Repeatable Read)

整个事务只在第一次 SELECT 时生成 ReadView
之后所有 SELECT 都用第一次的 ReadView。

意味着:

同一个事务的所有查询看到的都是“同一个快照”

这确保:

  • 可重复读(Repeatable read)

👇 这个动画能让你瞬间懂区别

假设有一行记录:

id=1, age=18

你开启事务 T1:

SET tx_isolation='READ-COMMITTED'; -- RC
BEGIN;
SELECT age FROM user WHERE id=1;

这时 ReadView1 = [记录当前活跃事务]


这时另一个事务 T2 来更新并提交:

UPDATE user SET age=20 WHERE id=1;
COMMIT;

⭐ 现在 T1 再查一次(RC 下):

SELECT age FROM user WHERE id=1;

因为 RC 每次 SELECT 都生成新的 ReadView2,所以:

第一次看到年龄=18
第二次看到年龄=20

就是“不一致”,这就是 不可重复读。


⭐ 那在 RR 下会怎样?

RR 在事务开始/第一次 SELECT 时创建 ReadView,之后都不会变。

即使 T2 已经提交,T1 仍然只能看到旧版本:

第一次看到 18
第二次仍然看到 18
第三次也看到 18

这就是 Repeatable Read。


🧩 所以 RC 与 RR 的本质差异一句话总结:

RC:每次读都看“最新提交的版本”
RR:整个事务都看“自己第一次看见的快照”

🧠 为什么 RR 能解决不可重复读?

因为:

  • ReadView 不变 → 你读的范围不变 → 看不到别人提交的更新

🔥 那 RR 能防幻读吗?(经典误区)

答案:InnoDB 的 RR + 间隙锁 = 可以防大部分幻读,但靠的是锁,不是 MVCC。

MVCC 本身不能防幻读。
原因很简单:

MVCC 只解决旧版本的问题
幻读是新插入了一行,这行根本没有旧版本

所以 InnoDB 使用 Gap Lock(间隙锁)来解决这个问题。

例如:

SELECT * FROM user WHERE age BETWEEN 10 AND 30 FOR UPDATE;

会锁住对应范围的间隙,别人无法插入 age 在这个区间的新行。


🧨 核心结论图(你面试直接说这个就够了)

                    RC                 RR
ReadView 生成      每次 SELECT        第一次 SELECT
可重复读           ❌ 不保证          ✔ 保证
不可重复读         ✔ 存在            ❌ 避免
幻读               ✔ 存在            ✔ 基本避免(靠锁)
MVCC 使用方式      读旧版本           读固定快照

相关新闻

  • 2025年12月小程序开发服务商权威推荐榜:创新赋能与用户体验口碑之选,深度解析技术实力与市场竞争力
  • 2025年中国井式炉靠谱厂家推荐:井式炉制造商及定制生产企业
  • 2025年12月降尘喷淋系统,工地喷淋,车间喷淋降温系统厂家最新推荐:降温效果与品质参考

最新新闻

  • 3个关键步骤解决WSABuilds安装失败:从包注册到架构匹配的完整指南
  • AD pcb设计规则设置和DRC检查
  • 浙江闸阀厂家实力排行:基于工况适配性的客观盘点 - 起跑123
  • 2026无锡网站建设哪家口碑好:实测筛选3家本土靠谱建站服务商,避坑不踩雷 - wxxwlm
  • 2026年五大SEO优化公司推荐:从传统搜索到生成式引擎,五家值得关注的服务商深度选型评测 - 资讯纵览
  • 微交互设计:从状态反馈到情感化动效的工程化实现

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号