MySQL8.0优化 - 事务的隔离级别
创始人
2024-01-30 05:46:12
0

文章目录

  • 学习资料
  • 事务的隔离级别
    • 脏读、不可重复读、幻读
      • 脏读(Dirty Read)
      • 不可重复读(Non-Repeatable Read)
      • 幻读(Phantom)
    • SQL中的四种隔离级别
      • 读未提交(READ UNCOMMITTED)
      • 读已提交(READ COMMITTED)MySQL默认
      • 可重复读(REPEATABLE READ)
      • 可串行化(SERIALIZABLE)
      • 不同隔离级别下的问题
    • MySQL支持的四种隔离级别


学习资料

【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!-哔哩哔哩】
【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java

事务的隔离级别

MySQL是一个客户端/服务器,对于同一个服务器来说,可以u若干个客户端之连接,每个客户端与服务器连接上后,就可以称为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发送请求语句,一个请求语句可能是某个事务的一部分,也就是对于服务器来说可能同时处理多个事务,事务有隔离性的特性,理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据。但这样对性能影响太大,我们即想保持事务隔离性,又想让服务器在处理访问同一数据的多个事务性能尽量高些,那就看二者如何权衡取舍了。

脏读、不可重复读、幻读

脏读(Dirty Read)

对于两个事务Session A、Session B、Session A读取了已经被Session B更新但还没有被提交的字段时。之后若Session B回滚,Session A读取的内容就是临时且无效的。

不可重复读(Non-Repeatable Read)

对于两个事务Seesion A、Session B,Session A读取了一个字段,然后Session B更新了该字段。之后Session A再次读取同一个字段,值就不同了。那就意味着发生了不可重复读。

幻读(Phantom)

对于两个事务Session A、Session B,Session A从一个表中读取一个字段,然后Session B在该表插入了一些新的行。之后,如果Session A再次读取同一个表,就会多出几行,那就意味着发生了幻读。

SQL中的四种隔离级别

读未提交(READ UNCOMMITTED)

READ UNCOMMITTED:读未提交,该隔离级别,所有事务都可以看到其他未提交事务的执行结果。不能避免脏读、不可重复读、幻读。

读已提交(READ COMMITTED)MySQL默认

READ COMMITTED:读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别。可以避免脏读,但不可重复读、幻读问题仍然存在。

可重复读(REPEATABLE READ)

REPEATABLE READ:可重复读,事务A在读到一条记录之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍然存在。这是MySQL的默认隔离级别。

可串行化(SERIALIZABLE)

SERIALIZABLE:可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除的操作。所有的并发问题都可以避免,但性能十分低下。能避免脏读、不可重复读和幻读。

不同隔离级别下的问题

SQL标准中规定,针对不同的隔离级别,并发事务可以发生不同严重程度的问题,具体情况如下:
在这里插入图片描述
脏写怎么没涉及到?因为脏写这个问题太严重了,不论哪种隔离级别,都不允许脏写的情况发生。
不同的隔离级别有不同的现象,并有不同的锁和并发机制,隔离级别越高,数据库的并发性能就越差,4种事务隔离级别与并发性能关系如下:
在这里插入图片描述

MySQL支持的四种隔离级别

不同的数据库厂商对SQL标准中规定的四种隔离级别支持不一样。比如,Oracle就支持READ COMMITTED(默认隔离级别)SERIALIZABLE隔离级别。MySQL支持4种隔离级别,但与SQL标准中所规定的各级隔离级别允许发生的问题却有些出入,MySQL在REPEATABLE READ隔离级别下,是可以禁止幻读的问题发生的。

MySQL的默认隔离级别为REPEATABLE READ,在MySQL8.0中默认隔离级别为READ COMMITTED

# 查看隔离级别,MySQL5.7.20的版本及之后;
SHOW VARIABLES LIKE 'transaction_isolation';# 不同MySQL版本中都可以使用的;
SELECT @@transaction_isolation;

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...