当前位置:网站首页>带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
2022-08-01 23:46:00 【web18334137065】
一. 前言
最近有学生出去面试,被问到这样一个题目:【假设目前你们使用的数据库是MySQL,现在有一个事务A,在事务A开始时读取到的数据结果是1;事务A中间有一段耗时操作,在事务A中做耗时操作的同时,有另外一个事务B把数据值改成了2并提交了**。请问在事务A中,**再一次查询该数据的结果应该是1还是2,并且说明原因】如下图所示:
二. 执行结果
在讲清楚这个问题之前,壹哥要先和大家一起打开数据库,看看这个问题的执行结果。我们可以首先创建一张表,这个表的名字叫做【tb_test】,并且插入一条数据,如下图所示:
接下来壹哥再开启一个事务A,在事务A中,我们首先查询出id=1这一行中d列的结果。
此时再开启第二个事务B,在事务B中把数据修改成2。
此时数据库中,id=1这条数据中d列的值已经等于2了。我们再回到事务A中,观察一下此时查询的结果是多少。
现在我们把事务A结束,再查询观察一下此时的结果。
三. MySQL的默认隔离级别
大家此时就可以知道这个问题的答案了!我们发现【MySQL在同一个事务中,多次查询的****同一个值的结果是不会变的,即使这个值被其他的事务改变过】。接下来壹哥就和大家来分析一下这个问题的原理。
3.1 事务并发带来的问题【脏读、不可重复读、幻读】
脏读:实际上就是在一个事务中读取到了另外一个事务还没有提交的数据**,**如下图所示:
不可重复读:在同一个事务中,读取同一数据的结果不一样。如下图所示:
幻读:指同一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的数据行 ,如下图所示:
3.2 数据库事务的隔离级别
数据库提供了4种隔离级别,来解决上述由于事务并发所****带来的问题,如下表所示:
3.3 MyQL数据库的默认级别
现在市面上常见数据库的默认隔离级别并不一样,比如Oracle 和 SQL Server的默认隔离级别是【读已提交】,这能解决脏读的问题。而我们面试题中用的MySQL数据库****,其****默认隔离级别是【可重复读】。
至此,面试题答案是 1 的原因,我们应该就可以理解了**!MySQL默认的隔离级别是【可重复读】,所以****在同一个事务中,读取同一个数据得到的结果应该是一样的。**
四. 小结
事务的隔离级别越高,在并发时产生的问题就越少,但同时付出的性能消耗也就越大,因此很多时候必须在并发性和性能之间做一个权衡。现在你对数据库的隔离级别以及事务特性的理解是不是又加深了呢?如果你还有其他问题,可以在评论区给壹哥留言哦。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- Solve the port to take up
- C language - branch statement and loop statement
- problem solved
- 工作5年,测试用例都设计不好?来看看大厂的用例设计总结
- An interview question about iota in golang
- A brief analysis of mobile APP security testing in software testing, shared by a third-party software testing agency in Beijing
- color transparency parameter
- When using DocumentFragments add a large number of elements
- 机器学习文本分类
- 架构基本概念和架构本质
猜你喜欢
Thymeleaf简介
20220725 Information update
sys_kill system call
[LeetCode304 Weekly Competition] Two questions about the base ring tree 6134. Find the closest node to the given two nodes, 6135. The longest cycle in the graph
1个月写900多条用例,二线城市年薪33W+的测试经理能有多卷?
2022第六届强网杯部分wp
@WebServlet注解(Servlet注解)
Thesis understanding [RL - Exp Replay] - Experience Replay with Likelihood-free Importance Weights
经典文献阅读之--DLO
云原生DevOps环境搭建
随机推荐
软件测试之移动APP安全测试简析,北京第三方软件检测机构分享
What is CICD excuse me
Appears in oozie on CDH's hue, error submitting Coordinator My Schedule
Share an interface test project (very worth practicing)
[LeetCode304周赛] 两道关于基环树的题 6134. 找到离给定两个节点最近的节点,6135. 图中的最长环
numpy.around
避免使用 <b>、<i>、<s> 和 <u> 标签
字节跳动面试官:请你实现一个大文件上传和断点续传
@Scheduled注解详解
numpy.isclose
【MySQL篇】初识数据库
Quartus 使用 tcl 文件快速配置管脚
一款简洁的文件传输工具
Bean的生命周期
ICLR 2022 Best Paper: Partial Label Learning Based on Contrastive Disambiguation
正则表达式
Dynamic Scene Deblurring with Parameter Selective Sharing and Nested Skip Connections
FAST-LIO2 code analysis (2)
nodejs--process
Always use "noopener" or "noreferrer" for links that open in a new tab