讨论一个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.mzph.cn/bicheng/60168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json绘制热力图

首先需要一段热力信息的json,我放在头部了。 然后就是需要de-geo库了。 实现代码如下: import * as d3geo from d3-geoimport trafficJSON from ../assets/json/traffic.jsonlet geoFun;// 地理投影函数// let info {max: Number.MIN_SAFE_INTEGER,mi…

K8S之Prometheus 部署(二十)

部署方式:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus 源码目录:kubernetes/cluster/addons/prometheus 服务发现:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kube…

appium启动 install driver安装驱动

appium启动 appiumPS C:\Windows\system32> appium [Appium] Welcome to Appium v2.12.1 [Appium] The autodetected Appium home path: C:\Users\liyd\.appium [HTTP] Could not start REST http interface listener. The requested port may already be in use. Please m…

kafka中节点如何服役和退役

服役新节点 1)新节点准备 (1)关闭 bigdata03,进行一个快照,并右键执行克隆操作。 (2)开启 bigdata04,并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完记…

【MogDB】MogDB5.2.0重磅发布第七篇-支持PLSQL编译依赖

一、前言 在原生PG中,创建一个自定义函数或者存储过程,如果出入参的类型不存在,那么创建将会报错;但在ORACLE中仍然可以创建,只是状态为失效,后续补上缺少的类型即可。而原生PG则必须依照特定的顺序来创建…

【Three.js基础学习】21.Realistic rendering

前言 课程回顾 渲染器 1.色调映射 值意在将高动态范围](HDR)值转换为低动态范围(LDR) Three.is中的色调映射实际上会伪造将LDR转换为HDR的过程,即使颜色不是HDR, 结果会产生非常逼真的渲染效果 THREE .NoToneMapping (default) 无色调映射 THREE.Linear…

SpringBoot集成Flink-CDC

Flink CDC CDC相关介绍 CDC是什么? CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到MQ以…

ORB_SLAM3安装

ORB_SLAM3安装 一.前期准备1.1ubuntu查看当前版本的命令1.2 根据ubuntu版本,更新下载软件源1.3 先下载git1.4 vim语法高亮1.5 常见的linux命令 二.ORB-SLAM3下载2.1 ORB_SLAM3源码下载2.2 安装依赖库2.2.1 依赖库2.2.2 安装pangolin2.2.3 安装opencv2.2.4 Eigen3安装…

无需云端!国产开源大语言模型llama.cpp本地实战

作者:高瑞冬 注: 文章是2023年底写的。代码和运行方式虽有些旧,但基本原理一样。现在出来ollama,vllm等工具框架用来本地部署大模型,顺便更新一下。 [TOC](最后有彩蛋) 背景 上海人工智能实验室与商汤科技…

leetcode20.括号匹配

题目描述 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个…

横向思维导图前端样式

追溯记录图路上 代码如下 index.vue <template><div style"margin-left: 5%;margin-top: 6%"> <el-form style"margin-top: -5%; " :inline"true"><el-form-item label"药品名称"><el-select v-model&qu…

实验报告6-项目测试与部署

资料下载 实验报告4-实现分页功能 一、实现思路 打包运行商品分页项目。要求&#xff1a; 1、测试项目service层的分页功能&#xff0c; 2、controller层添加first()并测试 3、将项目打为JAR包并运行&#xff0c; 4、将项目打为WAR包并运行。 二、实验步骤 1、测试项目s…

深度学习:微调(Fine-tuning)详解

微调&#xff08;Fine-tuning&#xff09;详解 微调&#xff08;Fine-tuning&#xff09;是机器学习中的一个重要概念&#xff0c;特别是在深度学习和自然语言处理&#xff08;NLP&#xff09;领域。该过程涉及调整预训练模型的参数&#xff0c;以适应特定的任务或数据集。以下…

清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!

&#x1f310; 在人工智能领域&#xff0c;多模态模型的发展正如火如荼。今天&#xff0c;我们要介绍的是由清华大学提出的Mini-Omni2&#xff0c;这是一个开源的多模态语言模型&#xff0c;它在功能上与GPT-4o相媲美&#xff0c;能够理解和生成视觉、听觉和文本内容&#xff0…

简单叙述 Spring 是如何解决循环依赖问题的呢?

文章目录 什么是循环依赖&#xff1f;为什么Spring要解决循环依赖&#xff1f;Spring是如何解决循环依赖的&#xff1f;具体过程是这样的&#xff1a;结论推荐阅读文章 什么是循环依赖&#xff1f; 首先&#xff0c;我们得知道什么是循环依赖。想象一下&#xff0c;如果有两个…

HarmonyOS入门 : 获取网络数据,并渲染到界面上

1. 环境搭建 开发HarmonyOS需要安装DevEco Studio&#xff0c;下载地址 : https://developer.huawei.com/consumer/cn/deveco-studio/ 2. 如何入门 入门HarmonyOS我们可以从一个实际的小例子入手&#xff0c;比如获取网络数据&#xff0c;并将其渲染到界面上。 本文就是基于…

【计网不挂科】计算机网络期末考试(综合)——【选择题&填空题&判断题&简述题】完整试卷

前言 大家好吖&#xff0c;欢迎来到 YY 滴计算机网络 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的计算机网络题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章是去答案版本。带答案的版本在下…

msvcr100.dll丢失怎么解决?高效靠谱的六种解决方法分享

在我们使用电脑的时候&#xff0c;有一种叫动态链接库&#xff08;DLL&#xff09;的文件特别重要。比如&#xff0c;msvcr100.dll是Microsoft Visual C 2010 Redistributable包里的一部分&#xff0c;很多应用程序在运行的时候都需要用到它。但是&#xff0c;有些用户在使用的…

【C++练习】二进制到十进制的转换器

题目&#xff1a;二进制到十进制的转换器 描述 编写一个程序&#xff0c;将用户输入的8位二进制数转换成对应的十进制数并输出。如果用户输入的二进制数不是8位&#xff0c;则程序应提示用户输入无效&#xff0c;并终止运行。 要求 程序应首先提示用户输入一个8位二进制数。…

【SpringBoot】19 文件/图片下载(MySQL + Thymeleaf)

Git仓库 https://gitee.com/Lin_DH/system 介绍 从 MySQL 中&#xff0c;下载保存的 blob 格式的文件。 代码实现 第一步&#xff1a;配置文件 application.yml spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8datasource:driver-class-name: com.mysql.…