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

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

快照读

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

当前读

  • 定义:当前读读取的是数据的最新版本,并且会对读取的数据加锁,以保证数据的一致性和完整性。
  • 实现原理:通过锁机制实现。会根据操作类型(如 SELECT FOR UPDATE 、 SELECT LOCK IN SHARE MODE 、 INSERT 、 UPDATE 、 DELETE 等)对数据加上相应的锁(排它锁或共享锁),防止其他事务同时修改数据。
  • 使用场景:当需要获取最新数据并对其进行修改,或者需要保证数据在读取和后续操作过程中的一致性时使用,如在转账操作中先读取账户余额再进行更新。
  • 示例:使用 SELECT FOR UPDATE 语句进行查询,会对查询结果集的记录加排它锁,其他事务无法对这些记录进行修改,直到当前事务提交或回滚。
相关推荐
好奇的菜鸟5 小时前
Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
数据库·spring boot·sql
不太可爱的叶某人6 小时前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安6 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
量子联盟7 小时前
原创-基于 PHP 和 MySQL 的证书管理系统,免费开源
开发语言·mysql·php
小光学长8 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室8 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇8 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
鬼才血脉9 小时前
Linux(centos)安装 MySQL 8
linux·mysql·centos
float_六七10 小时前
SQL六大核心类别全解析
数据库·sql·oracle
Code季风12 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul