当前位置: 首页 > news >正文

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

🧨 先一句话总纲:

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 使用方式      读旧版本           读固定快照
http://www.jsqmd.com/news/64099/

相关文章:

  • 1分钟AI一键生成歌曲软件推荐
  • 2025论文降重降AI神器终极对决!用学术猹,AI率轻松降至个位数!
  • 2025 年 12 月软件开发公司权威推荐榜:小程序开发、APP开发,技术实力与创新服务深度解析
  • 2025年十大口碑好的智能消毒柜源头厂家推荐,学校智能消毒柜
  • 2025年上海财税服务公司排名:宝园财税的服务灵活性、基本信
  • 2025年捏合机品牌排名推荐:力创捏合机口碑怎么样?
  • 2025年全国井式炉十大源头厂家排行榜,正规厂商专业制造商新
  • 2025 年 12 月软件开发公司权威推荐榜:创新引擎与高效交付口碑之选
  • 10411_基于Springboot的物业管理系统
  • 2025年12月小程序开发服务商权威推荐榜:创新赋能与用户体验口碑之选,深度解析技术实力与市场竞争力
  • 实用指南:2. 单片机基础概述
  • 2025年12月APP开发公司权威推荐榜:创新技术与用户体验双轮驱动,精选实力派开发团队深度解析
  • 2025年上海十大民事纠纷处理机构推荐:看哪家口碑好
  • B+Tree(理解索引为什么这样做)
  • 2025年12月车间喷淋喷雾,车间喷雾降尘设备,高压喷雾机厂家最新推荐:喷雾精度与品牌筛选
  • 2025年12月降尘喷淋系统,工地喷淋,车间喷淋降温系统厂家最新推荐:降温效果与品质参考
  • 內網滲透:Metasploit、Cobalt Strike使用
  • 2N7002K-ASEMI智能家居控制专用2N7002K
  • 2025年深圳Top5智能营销SaaS公司排行榜:南方网通优
  • 探秘中臻达:钢结构领域的靠谱之选
  • 20232411 2025-2026-1 《网络与系统攻防技术》实验八实验报告
  • VC(9.0~14.x)运行库下载链接
  • Kubernetes集群的搭建与DevOps实践(上)- 架构设计篇
  • 2025年景观护栏设计公司五大推荐,景观护栏设计厂家选哪家合
  • 2025年中国口碑好的包装箱木箱公司推荐:木头包装箱定制厂家
  • 2025年电线电缆,国标电线电缆,铜芯电线电缆厂家推荐:行业盘点与品质红榜发布
  • 2025年电线电缆,国标电线电缆,铜芯电线电缆厂家推荐,高稳定,导电强的行业优选
  • 【QT/C++】Qt基础控件详解:输入与显示控件(超详细) - 详解
  • 2025年电线电缆,国标电线电缆,铜芯电线电缆厂家推荐,导电工艺与市场口碑深度解析
  • 智能安全帽哪家好?哪家智能安全帽质量管控严