可重复读隔离级别如何解决脏读、不可重复读

article/2025/10/19 6:39:13

我们都知道可重复读隔离级别可以解决脏读、不可重复读。那么具体是如何解决的呢?
下面先通过实验来演示可重复读能够解决脏读、不可重复读问题,然后解释具体的原因。

环境搭建

1. 建立两个session连接MySQL,session1和session2

关闭session1和session2的事务自动提交。

set autocommit=0; // 关闭自动提交
select @@autocommit; // 查看当前session的自动提交状态

在这里插入图片描述
2. 将session1和session2的隔离级别设置为可重复读。

set tx_isolation='repeatable-read'; // 设置当前session的隔离级别为可重复读
select @@tx_isolation; //查看当前session的隔离级别

在这里插入图片描述
3. 随便创建一张表,我这里是user。
在这里插入图片描述
这里是user中的数据:
在这里插入图片描述

开始实验

1. 首先在session2中查询name='zz’的数据。

select * from user where name='zz';

在这里插入图片描述
2. 在session1中开启事务,然后改变name='zz’的age字段为46。

begin; // 开启事务
update user set age=46 where name='zz';  //更新数据

在这里插入图片描述
这时候session2中肯定是查不到数据的更改的,也就解决了脏读的问题:
在这里插入图片描述
3.将session1中的事务进行提交,再次到session2中查询该字段。

commit; // session1中提交事务
select * from user where name='zz'; //session2中再次查询该字段

在这里插入图片描述
这就解决了不可重复读的问题。

底层解释

1. 在InnoDB中,解决事务的隔离性(Isolation)是通过多版本并发控制(MVCC)和锁(lock)机制来实现的。
2.表(user)中的数据是有两个状态的,prepare和commit。其中prepare是事务提交之前数据的状态,而commit是事务提交之后的状态。
3.数据通过MVCC控制是具有多个版本的,其原理是:MVCC会在每行数据上增加两个字段,事务ID(DB_TRX_ID)指向前一个数据的指针(DB_ROLL_PTR),根据指针和事务ID,就可以实现行数据的多版本。
在这里插入图片描述
4.在可重复读的隔离级别下,InnoDB每次进行select查询语句,只有第一次执行select语句会产生数据快照(整张表的快照),之后执行相同的select语句,不再产生数据快照,那么下次使用相同语句查询时,访问的快照仍然是第一次产生的数据快照。那么即使当session1提交(commit)事务之后,session2访问的仍然是事务提交之前的即数据处于prepare状态的数据快照。这就解决了不可重复读的问题。


http://chatgpt.dhexx.cn/article/QMXdYvXS.shtml

相关文章

简单聊聊mysql的脏读、不可重复读、幻读

最近,在一次 mysql 死锁的生产事故中,我发现,关于 mysql 的锁、事务等等,我所知道的东西太碎了,所以,我试着用几个例子将它们串起来。具体做法就是通过不断地问问题、回答问题,再加上“适当”的…

MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)

文章目录 一、MVCC概念二、MVCC应用于已提交读隔离级别1. 解决脏读2. 无法解决不可重复读3. 无法解决幻读 三、MVCC应用于可重复读隔离级别1. 解决脏读2. 解决不可重复读3. 理解 可重复读隔离级别,只生成一次数据快照4. 理解 可重复读隔离级别,只能部分解…

mysql防止不可重复读_mysql怎么解决不可重复读

mysql解决不可重复读的方法:采用了mvcc多版本并发控制,mvcc是利用在每条数据后面加了隐藏的两列,即创建版本号和删除版本号,每个事务在开始的时候都会有一个递增的版本号。 【相关学习推荐: mysql解决不可重复读的方法…

MySQL事务之不可重复读问题

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/89739475 文章目录 一、不可重复读概述1、事例2、分析 二、演示不可重复读1、…

数据库脏读、幻读、不可重复读与四种隔离级别的理解

前言 本章着重点是介绍:出现脏读、幻读、不可重复读的原因,以及设定四种隔离级别如何解决这些现象,结合图例让读者阅读得更加通透 一、什么是事务? 所谓事务是用户定义的一个数据库序列,这些操作要么全做&#xff0…

不可重复读和幻读 重

如有侵权请联系本人删除 首先了解acid与mysql MySQL事务之ACID实现原理(全方位解读) 深入学习MySQL事务:ACID特性的实现原理 二者很相似,不可重复读指的是对同一条记录(可以理解为对同一行)前后两次的读取…

灰色关联法 —— matlab

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素,其随时间或不同对象而…

如何利用python实现灰色关联分析?

1.灰色关联分析简介 灰色系统这个概念是相对于白色系统和黑色系统而言的。从控制论的知识里,颜色一般代表对于一个系统我们已知信息的多少,白色代表信息量充足,黑色代表我们其中的构造并不清楚的系统,而灰色介于两者之间&#xf…

灰色关联分析法详解及python实践

1. 关于灰色关联分析 1.1. 什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。 在系统发展过…

python灰色关联度分析_灰色关联分析法 python

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文2290字,预计阅读需10分钟; 关联分析(association analysis)主要用于发现隐藏在大型数据集中的有意义的联系,它起源于商品销售领域,“啤酒与尿布”的故…

灰色关联分析应用

参考学习b站:数学建模学习交流 感觉这篇博客写的很好:灰色关联分析Matlab代码实现 看完后自己尝试运行的一下,发现和自己本地的matlab代码运行结果不同,就把其中细节写到这篇博客里了 运行上述博客应用2的代码,将更…

灰色关联案例与代码

案例 求他们之间的关联度,并且大小排序。 代码 写了注释,自行查看,换了案例,你只需要修改这一部分即可: 因为读取不一样了嘛,你总要改改数字。 clc; close; clear all; xxlsread(gray_data1.xlsx); xx(:,2:end);%所…

灰色关联法 —— python

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素,其随时间或不同对象而变…

数学建模之灰色关联分析(GRA)

本文参考的是司守奎,孙兆亮主编的数学建模算法与应用(第二版) 灰色关联分析不仅能够用做关联分析,也能够用于评价。 其具体分析步骤如下: 第一步,需要确定评价对象和参考数列。 评价对象一般指的就是待分…

【DOM】DOM操作之如何添加、删除、替换元素_04

目录 一. 添加删除替换元素 1. 添加新元素: 3步: (1). 创建一个新的空元素对象 (2). 为新元素设置必要的属性: 新元素.属性名"属性值" (3). 将新元素添加到DOM树 2. 示例: 动态创建a元素和input元素 3. 示例: 动态生成表格内容 4. 优化 5. 删除元素: 父元素.re…

DOM操作_获取元素

概述 DOM (Document objectModal) :文档对象模型。 DOM;是浏览器提供的(浏览器特有),专[ ]用来操作网页内容的一些JS对象。 目的:让我们可以使用Js/TS代码来操作页面(HTML) 内容,让页面“动”起来,从而实现Web开发。 HTML:超文本标记语言…

DOM操作class属性的方法

新增标签对象.classList.add(新增属性值) 删除 标签对象.classList.remove(删除属性值) 替换标签对象.classList.replace(原始 , 新的) 切换标签对象.classList.toggle(切换属性值)有执行删除,没有执行新增 <body><div class "box box2 "></div&…

js DOM操作自定义属性

自定义属性&#xff1a;在日常开发中&#xff0c;html的内置属性已经无法满足程序员的日常开发&#xff0c;所以需要我们自己定义属性&#xff0c;H5给我们新增了自定义属性&#xff0c;为了防止自定义属性和内置属性引起歧义&#xff0c;所以H5规定自定义属性以data-开头定义。…

JavaScript之DOM操作获取元素、事件、操作元素、节点操作

什么是 DOM&#xff1f; 文档对象模型&#xff08;Document Object Model&#xff0c;简称 DOM&#xff09;&#xff0c;是 W3C 组织推荐的处理可扩展标记语言&#xff08;HTML或者XML&#xff09;的标准编程接口。W3C 已经定义了一系列的 DOM 接口&#xff0c;通过这些 DOM 接…

DOM 基础操作

文章目录 前言一、DOM 简介1.1 什么是 DOM 二、获取元素2.1 如何获取页面元素2.2 根据 ID 获取2.3 根据标签名获取2.4 通过 HTML5 新增的方法获取2.5 获取特殊元素&#xff08;body&#xff0c;html&#xff09; 三、事件基础3.1事件三要素3.2 执行事件的步骤3.3常见的鼠标事件…