当前位置:网站首页>带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
带你搞懂MySQL隔离级别,两个事务同时操作同一行数据会怎样?
2022-07-31 05:11:00 【m0_67391401】
一. 前言
最近有学生出去面试,被问到这样一个题目:【假设目前你们使用的数据库是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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
uni-app进阶之自定义【day13】
uni-app进阶之生命周期【day8】
【swagger关闭】生产环境关闭swagger方法
局部变量成员变量、引用类型、this,static(第五天)
碎片化NFT(Fractional NFT)
“档次法”——用于物品体积分布不均匀的01背包问题的求解方法
16 【打包上线 图片懒加载】
阿里一面,说说你知道消息中间件的应用场景有哪些?
【C语言3个基本结构详解——顺序、选择、循环】
If the account number or password is entered incorrectly for many times, the account will be banned.
随机推荐
解决响应式数据依赖响应式数据无响应问题
feign调用不通问题,JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
tf.keras.utils.pad_sequences()
【swagger关闭】生产环境关闭swagger方法
Linux中mysql密码修改方法(亲测可用)
13 【代理配置 插槽】
Sword Point Offer Special Assault Edition ---- Day 2
字符串的新增方法
踏上编程之路,你必须要干的几件事
win11中利用IIS10搭建asp网站
Memcached :安装
对递归的一些感悟
C语言实验五 循环结构程序设计(二)
leetcode-每日一题735. 行星碰撞(栈模拟)
uni-app进阶之认证【day12】
First acquaintance with Flask
数据库上机实验6 数据库完整性
阿里一面,说说你知道消息中间件的应用场景有哪些?
剑指offer基础版 ---- 第29天
Swordsman Offer Special Assault Edition ---- Day 6