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

mysql的快照读与当前读的区别

这两个是 MySQL InnoDB 在 MVCC 下的两种主要读方式,区别核心在于 是否加锁、是否读到最新数据


1. 快照读(Snapshot Read)

定义:
通过 MVCC(多版本并发控制) 机制读取某行数据的历史版本(基于事务启动时的快照),不加锁

特点:

  • 读的是事务开始时能看到的数据版本(符合隔离级别规则)。
  • 不会阻塞其他事务的更新,也不会被更新阻塞。
  • 实现原理依赖 InnoDB 的 undo log,在需要时从旧版本回溯数据。
  • 常用于 一致性非锁定读(Consistent Non-locking Read)。

典型 SQL:

SELECT * FROM table WHERE id = 1;

只要不是 SELECT ... LOCK 或加 FOR UPDATE,就是快照读。

适用场景:

  • 大部分普通查询
  • 减少锁竞争
  • 保证一致性读取

2. 当前读(Current Read)

定义:
直接读取 记录的最新版本,并且加锁,保证其他事务不能修改它直到当前事务结束(或释放锁)。

特点:

  • 读取的是此刻最新的数据版本。
  • 会加共享锁(S)排他锁(X),阻塞其他可能冲突的事务。
  • 常用于需要“读后立刻更新”的场景。

典型 SQL:

SELECT * FROM table WHERE id = 1 FOR UPDATE;   -- 加排他锁
SELECT * FROM table WHERE id = 1 LOCK IN SHARE MODE;  -- 加共享锁
UPDATE table SET value = value + 1 WHERE id = 1;      -- 更新也是当前读
DELETE FROM table WHERE id = 1;                       -- 删除也是当前读

适用场景:

  • 需要马上更新读取到的数据
  • 防止幻读、并发修改

3. 对比总结

维度快照读当前读
读取版本事务开始时可见版本(历史版本)最新版本
是否加锁❌ 否✅ 是
是否阻塞❌ 不阻塞✅ 可能阻塞或被阻塞
实现依赖MVCC + Undo Log锁(Record Lock, Gap Lock, Next-Key Lock)
场景普通查询更新前读取、并发控制

📌 记忆技巧:

  • “快照读” → 拍张照片,读照片里的数据,照片不会变(历史一致性)。
  • “当前读” → 直接看现实中的人,并且拉住他不让走(加锁防别人动数据)。

如果你愿意,我可以帮你画一张 事务时间线对比图,把快照读和当前读的可见性差异直观画出来,方便记忆。这样你在面试讲解时更容易说清楚。
你需要我画这张图吗?

http://www.lryc.cn/news/620135.html

相关文章:

  • 云电竞游戏盒子相比传统PC有什么优势?
  • YOLO-v2-tiny 20种物体检测模型
  • Unity中启用DLSS 【NVIDIA】
  • 循序渐进学 Spring (上):从 IoC/DI 核心原理到 XML 配置实战
  • AWS Bedrock Claude模型费用深度分析:企业AI成本优化指南
  • HarmonyOS Navigation路由跳转的完整示例
  • 天猫商品评论API:获取商品热门评价与最新评价
  • 销售数据预处理与分析学习总结
  • 基于UniApp的智能在线客服系统前端设计与实现
  • Github desktop介绍(GitHub官方推出的一款图形化桌面工具,旨在简化Git和GitHub的使用流程)
  • 公司项目用户密码加密方案推荐(兼顾安全、可靠与通用性)
  • Python day43
  • 【易错题】C语言
  • NTUSER.DAT是什么文件
  • Vue内置组件全解析:从入门到面试通关
  • docker安装centos
  • 接口添加了 @Transactional 注解并开启事务,而其中一个小方法启动了新线程并手动提交数据,会有什么影响?
  • 服务器安全笔记
  • 学习:JS进阶[10]内置构造函数
  • [ 数据结构 ] 泛型 (上)
  • Excel多级数据结构导入导出工具
  • Laravel 使用ssh链接远程数据库
  • Linux Framebuffer(帧缓冲)与基本 UI 绘制技术
  • 【R语言】RStudio 中的 Source on Save、Run、Source 辨析
  • 认知系统的架构: 认知残余三角形、认知主体意识 和认知演进金字塔
  • 【docker①】在VS Code中使用Docker容器
  • 从零用 NumPy 实现单层 Transformer 解码器(Decoder-Only)
  • 未来AI:微算法科技(NASDAQ:MLGO)开发基于忆阻器网络储层计算MemristorPattern虚拟平台
  • 通过限制网络访问来降低服务器被攻击风险的方法
  • 云原生技术k8s部署prometheus