mysql可重复读隔离级别下的快照读和当前读

在MySQL的可重复读隔离级别下,快照读和当前读是两种不同的读取方式,它们的特点和应用场景有所不同。

快照读

  • 定义:快照读是指在事务中读取数据时,读取的是事务开始时的历史版本数据,而非当前最新的数据。
  • 实现原理:通过MVCC机制实现。事务开启时生成Read View,根据该视图来判断数据版本的可见性,确保在事务内多次读取同一数据时结果一致。
  • 使用场景:适用于在一个事务中需要多次读取相同数据且要求结果一致的情况,比如报表生成、数据统计等,能避免脏读和不可重复读问题。
  • 示例:在一个事务中执行多次 SELECT 语句读取某一行数据,即使其他事务在期间对该数据进行了修改,快照读仍会返回事务开始时看到的数据版本。

当前读

  • 定义:当前读读取的是数据的最新版本,并且会对读取的数据加锁,以保证数据的一致性和完整性。
  • 实现原理:通过锁机制实现。会根据操作类型(如 SELECT FOR UPDATE 、 SELECT LOCK IN SHARE MODE 、 INSERT 、 UPDATE 、 DELETE 等)对数据加上相应的锁(排它锁或共享锁),防止其他事务同时修改数据。
  • 使用场景:当需要获取最新数据并对其进行修改,或者需要保证数据在读取和后续操作过程中的一致性时使用,如在转账操作中先读取账户余额再进行更新。
  • 示例:使用 SELECT FOR UPDATE 语句进行查询,会对查询结果集的记录加排它锁,其他事务无法对这些记录进行修改,直到当前事务提交或回滚。
相关推荐
weixin_460443569 小时前
考试监控大屏为什么不能直接查数据库?WebSocket、Redis与实时数据聚合架构设计
数据库·redis·在线考试系统·培训考试系统·煤矿培训考试系统·煤矿在线考试系统·宏远培训考试系统
风哥2号9 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
九皇叔叔13 小时前
【第二章】Redis基础入门:Redis是什么、为什么快以及核心特性详解
数据库·redis·缓存
莫陌尛.13 小时前
Docker MySQL 删表卡死、执行超时(MDL锁阻塞)问题复盘与根治方案
mysql·docker·容器
云和恩墨13 小时前
删库不跑路,回滚极速触达——zData S“旁路日志”持续保护原理深剖
数据库
MetaLite14 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Wang's Blog16 小时前
Java框架快速入门: Spring Security+OAuth2之元注解简化权限表达式
java·数据库·spring
毕业设计70316 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
蓝速科技18 小时前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享
QYR-分析18 小时前
重轨受电弓行业深度报告:市场格局、技术迭代与发展前景
大数据·数据库·人工智能