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

讨论一个mysql事务问题

最近在阅读一篇关于隔离级别的文章,文章中提到了一种场景,我们下面来分析一下。

文章目录

  • 1、实验环境
  • 2、两个实验的语句执行顺序
  • 3、关于start transaction和start transaction with consistent snapshot
  • 4、实验结果解释
    • 4.1、实验1
    • 4.2、实验2
    • 4.3、调整实验1,达到和实验2一样的效果

1、实验环境

版本:5.7.30-log
隔离级别:RR

2、两个实验的语句执行顺序

在这里插入图片描述

3、关于start transaction和start transaction with consistent snapshot

这篇文章讨论的问题是start transaction和start transaction with consistent snapshot这两条命令的区别。
start transaction:开启事务,但只有发生第一条和InnoDB有关系的sql语句时,事务才开始生效。也就是说单独执行start transaction并不会开启事务,只有执行一条sql语句才可以,select语句都行。
start transaction with consistent snapshot:开启一致性快照读,这个命令的含义就相当于执行start transaction后紧接着执行一条select,意思是立即开启事务。

4、实验结果解释

能理解标题3的内容,上面的案例就很好理解了,我们来讨论一下。

4.1、实验1

实验1中,事务A事务B的语句执行顺序为:
事务B:select
事务A:start transaction(此时,事务A并没有开启事务)
事务B:insert(事务B是一个自动事务,执行完即提交)
事务A:select(真正开启事务)
此时事务A是能查询到事务B新增的数据的。因为在事务A真正开启事务之前,事务B已经提交了,事务A开启事务时,肯定是能读取到其他事务已提交的结果的

4.2、实验2

实验2中,事务A事务B的语句执行顺序为:
事务B:select
事务A:start transaction with consistent snapshot(事务A开启事务)
事务B:insert(事务B是一个自动事务,执行完insert即提交)
事务A:select
此时事务A就不能读取到事务B新增的数据,这是InnoDB不可重复读所做的事情

4.3、调整实验1,达到和实验2一样的效果

实验1,调整一下事务A语句的执行顺序,就不会读取到事务B的新增数据了。
事务B:select
事务A:start transaction(此时,事务A并没有开启事务)
事务A:select(真正开启事务)
事务B:insert(事务B是一个自动事务,执行完insert即提交)
事务A:select(事务A事务B执行insert前已经开启事务,因为RR隔离级别下不可重复读的原因,所以就读取不到事务B新增的数据)

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

相关文章:

  • pytest插件精选:提升测试效率与质量
  • HTB:Sightless[WriteUP]
  • 国产化浪潮下,高科技企业如何选择合适的国产ftp软件方案?
  • 自注意力机制
  • 抽象工厂模式详解
  • 【Linux】软硬链接和动静态库
  • HarmonyOS入门 : 获取网络数据,并渲染到界面上
  • 【贪心】【哈希】个人练习-Leetcode-1296. Divide Array in Sets of K Consecutive Numbers
  • 【数据库实验一】数据库及数据库中表的建立实验
  • Web服务nginx基本实验
  • Ubuntu实现双击图标运行自己的应用软件
  • js id字符串转数组
  • 《手写Spring渐进式源码实践》实践笔记(第十八章 JDBC功能整合)
  • 边缘计算在智能交通系统中的应用
  • HTML5+css3(浮动,浮动的相关属性,float,解决浮动的塌陷问题,clear,overflow,给父亲盒子加高度,伪元素)
  • 【C++ 滑动窗口】2134. 最少交换次数来组合所有的 1 II
  • 使用 PyTorch 实现并测试 AlexNet 模型,并使用 TensorRT 进行推理加速
  • Python 数据可视化详解教程
  • springboot集成opencv开源计算机视觉库
  • CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳
  • 2024年11月8日上海帆软用户大会
  • 信息泄露漏洞一文速通
  • Android 启动时应用的安装解析过程《二》
  • 智谱AI:ChatGLM强大的生成式语言模型
  • git tag
  • Golang--反射
  • ABAP:SET CURSOR FIELD设置鼠标焦点
  • 【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)
  • LabVIEW气体检测系统
  • LeetCode78. 子集(2024秋季每日一题 58)