MySQL8.0优化 - 事务的隔离级别

news2025/8/10 9:15:34

文章目录

  • 学习资料
  • 事务的隔离级别
    • 脏读、不可重复读、幻读
      • 脏读(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;

在这里插入图片描述

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

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

相关文章

北京化工大学数据结构2022/11/17作业 题解

(7条消息) 食用前须知(阅读并同意后在食用其他部分)_lxrrrrrrrr的博客-CSDN博客 看完进来哈 目录 问题 A: 邻接矩阵存储的图,节点的出度和入度计算(附加代码模式) 问题 B: 算法7-12:有向无环图的拓扑排序 问题 C: 有向图是否存…

剪枝算法:通过网络瘦身学习高效卷积网络

摘要 原文链接:https://arxiv.org/abs/1708.06519 深度卷积神经网络(CNNs)在现实世界中的应用很大程度上受到其高计算成本的阻碍。在本文中,我们提出了一种新的cnn学习方案,以同时减小模型的尺寸;2)减少运行时内存占用;3)在不影响精度的前…

[附源码]java毕业设计企业职工福利发放管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

WPF TreeView数据回填

这一期简单的说一下这个TreeView的数据回填, 上图是查询类型数据 上图是服务端的数据传递, 从数据库对应的查询出的数据传到服务端然后再传到客户端 上图就是在客户端后台启用刷新中的代码, DefaultView 获取自定义的视图 ItemsSource 获取…

如何在两个相关泛型类之间创建类似子类型的关系

本文正在参加「金石计划 . 瓜分6万现金大奖」 哈喽大家好,我是阿Q! 事情是这个样子的...... 对话中的截图如下: 看了阿Q的解释,你是否也和“马小跳”一样存在疑问呢?请往👇看 我们都知道在java中&#x…

领英高效开发客户方法(建议收藏)

领英高效开发客户 有效使用linkedIn领英,充分利用其人脉来为我们外贸人开发客户服务,我们也能获得外贸业-务更多更好机遇,扩大自己的外贸人脉圈。 在这里和大家分享一下,如何利用好领英linkedIn,轻松免-费地开发国外客…

深度学习入门(四十二)计算机视觉——目标检测和边界框

深度学习入门(四十二)计算机视觉——目标检测和边界框前言计算机视觉——目标检测和边界框课件图片分类和目标检测边缘框目标检测数据集总结教材1 边界框2 小结前言 核心内容来自博客链接1博客连接2希望大家多多支持作者 本文记录用,防止遗忘…

m基于MATLAB数字调制解调仿真,包括ASK,FSK,DPSK及MDPSK,对比误码率

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 振幅键控(也称幅移键控),记做ASK,或称其为开关键控(通断键控),记做OOK 。二进制数字振幅键控通常记做2ASK。 对于振…

Spring Cloud(十一):Spring Cloud Security Oauth2

OAuth2 登录历程 basic 用户名:密码session cookietokenjwt 登录流程分析: https://www.processon.com/view/link/60a32e7a079129157118740f 微信开发平台文档: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Logi…

(2)paddle---简单线性回归和波士顿房价预测

1、参考地址 (1)blibli网站地址 251-03_PaddlePaddle求解线性模型_dec_哔哩哔哩_bilibili (2)波士顿数据集介绍参考了 机器学习:波士顿房价数据集_mjiansun的博客-CSDN博客 2、简单线性回归 (1)测试一…

上海亚商投顾:沪指失守3100点 教育板块逆势大涨

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指震荡调整,尾盘再度失守3100点,创业板指盘中涨超1%&am…

定制activemq_RPM包,注册系统服务并开机自启

rpmbuild命令用于创建软件的二进制包和源代码包。 1.准备环境 系统:Centos7 安装所需编译环境: # yum install epel-release -y # yum install rpmdevtools rpm-build gcc make tcl jemalloc -y 2.提前编译安装redis,此处以activemq-5…

nodejs学习week01

说明:学习nodejs之气那应该掌握html,css,JavaScript等前端基础技术 目录 一、什么是nodejs 二、nodejs的内部模块 1.fs文件系统模块 2.path路径模块 3.http服务器模块 三、module.exports对象 四、时间格式化 1.使用JavaScript的方…

Python自动化运维之一(Python入门)

Python简介 python是吉多范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白。大家都知道,当下全栈工程师的概念很火,而Python是一种全栈的…

docker-compose模板文件、命令的使用

docker-compose官网 一、docker-compose的命令 1、up(启动) 格式为 docker-compose up [options] [SERVICE…] 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器…

FAQ是什么?该如何编辑FAQ?

“FAQ”这个关键词可能很多人都见过,但是如果不是行业内的人,大概还不知道它的含义,所以本文将介绍 FAQ和 FAQ文档的编写。 “FAQ”是中文意思,意思是“常见问题解答”或“帮助中心”。研究显示,客户服务支持每天要花…

第四章. Pandas进阶—数据分组统计

第四章. Pandas进阶 4.3 数据分组统计 1.分组统计函数(groupby函数) 1).功能: 根据给定的条件将数据拆分成组每个组否可以独立应用函数(sum,mean,min)将结果合并到一个数据结构中 2).语法: DataFrame.gro…

5G无线技术基础自学系列 | 物理上行共享信道

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 NR PUSCH支持两种波形(参阅TS…

Python入门自学进阶-Web框架——26、DjangoAdmin项目应用-数据记录操作

对于每个表显示的数据,点击其中一条,进入这条数据的修改页面,显示此条数据的具体内容,并提供修改、删除等功能。主要是ModelForm的应用。 一、记录数据修改 首先是路由项的添加,点击一条记录后,进入相应的…

MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

什么是MaxEnt模型? MaxEnt模型的原理是什么?有哪些用途? MaxEnt运行需要哪些输入文件?注意那些事项? 融合R语言的MaxEnt模型的优势? 常用数据检索与R语言自动化下载及可视化方法 常用数据下载网站&…