并发事务会有哪些问题?

news2024/9/23 17:22:06

并发事务会有哪些问题?

多个事务并发的执行一定会出现相互争夺资源的问题。那么问题具体有哪些呢?

  • 脏写(丢失修改)
  • 脏读
  • 不可重复读
  • 幻读

以上这四个问题就是我们需要知道的。但是脏写,由于mysql最低的隔离级别都能避免掉该问题。所以脏写我们就不用去着重去记了。

我们就着重看剩下三个读问题。都是读,大家就更好记了。

首先我们说下脏读。A事务读取到了,B事务中还未提交的修改的数据。如果此时B事务发生了回滚。那么name也就还是原来的值,并没有修改为张三。但此时A事务中已经读到了张三,这就是脏读。

脏读

在这里插入图片描述
其次我们来说不可重复读,场景是A事务开启后,在第一次读取name时为王五,但此时B 开启事务修改了name为张三,并提交了(注意此时是提交了事务的)。那么如果A事务再读name,那么就会变成张三。如果此时B再开启事务,再将name修改为李四,并提交。那么A事务再读name,就又变成李四了。再一个事务中多次读取一个数据,结果不一样,那么就产生了不可重复读。 (大家可能有相应的疑惑,别慌等说完后我会解决滴。)

不可重复读

在这里插入图片描述
最后是幻读,场景是当A事务中范围查询数据时,此时B中开启事务并添加了新数据,并且满足A事务中查询语句的条件,并且提交了。那么A事务如果还有查询语句再进行查询时,会多出几条数据。此时就出现了幻读。

幻读

在这里插入图片描述
经过以上对几个读的讲解,我觉得大家多多少少有很多疑惑。我大胆猜测下。

  • 幻读和不可重复读这不是一样的问题吗?只不过是一个是修改语句,一个是插入语句。
  • 幻读和不可重复读这算是问题吗?其他事务修改了值并且提交了。难道不应该读取最新的值吗?
  • 脏读和不可重复读与幻读感觉是一样的呀,哪儿有区别呢?

问题解答:

1.幻读和不可重复读区别就在事务A中,如果读出的数据是比之前多,不管B事务是增加数据也好,修改数据也罢。都算幻读。如果读出的数据不多,但是不一样了,不一样是指当范围查找时数据变少了,或者精确查找时,返回的数据不一样了。这都是不可重复读。

2.幻读和不可重复读,我们感觉没啥问题。但我们往另外一个方向想。之前我们说过事务的四个特性,其中三个特性都是服务于一个,那就时一致性。我们就从一致性的角度思考,为什么幻读和不可重复读是问题。事务都要满足一致性,从一个状态到另一个状态,我们现在又拿最经典的转账问题,此时A中的事务操作张三和李四,假如A中的事务的一致性是要保证要么张三是1000,李四是1000.要么张三是900,李四是1100.这时A事务中保证的两个状态。那如果此时B事务进来了,修改了李四的存款,把李四的存款改成了500,并提交。那么A事务在进行读取李四的存款时就是500,然后加上100。最终A事务的状态就变成了张三900,李四600。这保证了A事务的一致性吗?没有吧。这儿满足了原子性,操作都是成功的,但是没保证隔离性,进而导致一致性失败。所以幻读和不可重复读算问题的。

3.脏读和不可重复读与幻读,他们都是读到了另外事务修改的数据。但区别就在,脏读他是读的未提交的事务。 而不可重复读和幻读,他们都是读的已提交的事务中修改的数据。这可能就是最大的区别了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758783.html

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

相关文章

gradle的下载、解压、环境变量配置以及命令行基本用法

父目录 Android 开发入门 - wuyujin1997 文章目录 Intro下载解压配置环境变量环境变量测试 命令行命令行基本用法命令行更多用法 Intro 关于Java项目的依赖、编译流程等管理,有三代的解决方案。 AntMavenGradle 可以想像这三代工具必定是各有特定,但整…

【算法 -- LeetCode】(020) 有效的括号

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

javaagent简单理解

1. javajaent是什么 javaagent可以理解为是一个插件,需要有一个jvm进程才能运行。例如arthas这个工具就是用到了javaagent。 2. 如何使用 1. 一种调用方式:java -javaagent:path[参数参数值] 2. 方法签名 public static void premain(String args, I…

从零玩转系列之SpringBoot3-核心原理

一、简介 1.前置知识 ● Java17 ● Spring、SpringMVC、MyBatis ● Maven、IDEA 2.环境要求 环境&工具版本(or later)SpringBoot3.1.xIDEA2023.xJava17Maven3.5Tomcat10.0Servlet5.0GraalVM Community22.3Native Build Tools0.9.19 二、SpringBoot3-核心原理 1.事件和监听器…

【Hippo4j监控Web容器Tomcat线程池】

🚀 线程池管理工具-Hippo4j 🚀 🌲 AI工具、AI绘图、AI专栏 🍀 🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者&#…

知识整合:Web页面请求的历程

Web页面请求的历程 内部涉及知识:一、准备:DHCP、UDP、IP 和以太网二、仍在准备:DNS和ARP三、仍在准备:域内路由选择到DNS服务器四、Web客户-服务器交互:TCP和HTTP五、HTTP请求响应格式Requests部分Responses 部分 下载一个Web页面…

2023.7.15

同余最短路 P3403 跳楼机 题意:给定h高的楼层,起始位置在第一层,可以选择操作向上移动x层或y层或z层,回到第一层 求可以到达的楼层数 思路:转化题意为求axbyczk(k在[1,h],x,y,z为正整数,有多少k满足条件&am…

基础IO

1.C的文件接口 "r" - 只读模式,打开文件用于读取,文件必须存在。 "w" - 写模式,打开文件用于写入,如果文件已存在则清空文件内容,如果文件不存在则创建新文件。 "a" - 追加模式&#…

手把手搭建mybatis入门程序

目录 准备数据库表 搭建工程 引入日志框架lockback SqlSessionUtil工具类封装 准备数据库表 CREATE TABLE t_car (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,car_num varchar(100) DEFAULT NULL COMMENT 汽车编号,brand varchar(100) DEFAULT NULL COMMENT 品牌,gui…

阿里云2核4G服务器能搭建几个网站?性能如何?

2核4G服务器能安装多少个网站?2核4g配置能承载多少个网站?一台2核4G服务器可以安装多少个网站?阿腾云2核4G5M带宽服务器目前安装了14个网站,从技术角度是没有限制的,只要云服务器性能够用,想安装几个网站就…

Java正则表达式校验某个字符串是否是合格的email

Java正则表达式校验某个字符串是否是合格的email 可以借助正则表达式校验某个字符串是否是合规的电子邮箱。对于邮箱的正则表达式有严格的模式,如:^[a-zA-Z0-9_&*-](?:\\.[a-zA-Z0-9_&*-])*(?:[a-zA-Z0-9-]\\.)[a-zA-Z]{2,7}$ 对应的Java实现…

Verilog基础之十六、RAM实现

目录 一、前言 二、工程设计 2.1 RAM IP核使用 2.2 设计代码 2.3 仿真代码 2.4 综合结果 2.5 仿真结果 一、前言 工程设计中除逻辑计算单元外,存储单元也是不可获取的部分,RAM(Random Access Memory)随机存取存储器即可以写入数据,也可…

Spring Cloud Gateway下的GC停顿排查之旅

01 背景 在微服务架构体系流行的当下,Spring Cloud全家桶已经是大多数团队的首选,我们也不例外,并且选择了Spring Cloud Gateway作为了业务网关,进行了一些通用能力的开发,如鉴权、路由等等。作为一个成熟的框架&#…

非线性弹簧摆的仿真(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

matplotlib定制绘图的线型、标记类型

文章目录 折线图参数列表实战演示特征字符串 折线图 折线图是科研绘图中最常见的一种图形, 表现的是数据的变化情况 import numpy as np import matplotlib.pyplot as pltx np.linspace(0,10,100) y np.sin(x) plt.plot(x,y) plt.show()参数列表 尽管绘图逻辑十…

Tensorflow-gpu保姆级安装教程(Win11, Anaconda3,Python3.9)

Tensorflow-gpu 保姆级安装教程(Win11, Anaconda3,Python3.9) 前言Tensorflow-gpu版本安装的准备工作(一)、查看电脑的显卡:(二) 、Anaconda的安装(三)、cuda下载和安装(四)、cudnn下载安装(五)、配置环境变量(六)、创建 tensorfl…

idea生成类关系图Diagrams

打开或选择该类,此处我以FutureTask类为例 在打开的该类内容内随意地方右键(或选中该类文件)》选择Diagrams》Show Diagrams》Java Classes此时就可以看到该类的关系图了

剖析C语言字符串函数

目录 前言: 一、strlen函数 功能: 参数和返回值: 注意事项: 返回值是无符号的易错点: strlen函数的模拟实现 1、计数器算法 2、递归算法 3、指针减去指针 二、strcpy函数 功能: 参数和返回值 …

【小沐学NLP】龙猫-InsCode Stable Diffusion 美图活动一期

文章目录 1、应用简介1.1 Stable Diffusion模型1.2 Stable Diffusion WebUI1.3 InsCode平台 2、界面简介2.1 打开Stable Diffusion WebUI2.2 选择模型2.3 选择功能模块2.4 文本输入2.5 参数设置 3、测试3.1 龙猫3.2 恐龙3.3 蓝天白云3.4 美少女战士 4、其他4.1 DALLE 24.2 Drea…

Linux调试工具GDB(2)

文章目录 前言一、数据断点二、x查看内存命令三、深入info命令四、调试中的技巧总结 前言 本篇文章我们继续讲解GDB调试。 一、数据断点 在 GDB (GNU Debugger) 中,数据断点是一种断点类型,它允许你在程序访问指定内存地址的数据时暂停程序的执行。通…