【MySQL进阶之路 | 高级篇】数据并发问题与四种隔离级别

news2024/9/22 11:37:11

1. 事务隔离级别

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

2. 数据并发问题

针对事务的隔离性和并发性,我们会怎么做出取舍呢?先看一下访问相同数据的事务在不保证串行执行(也就是执行完一个再执行下一个)的情况可能会出现哪些问题。

1). 脏写(Dirty Write)

对于两个事务SessionA和Session B,如果SessionA修改了另一个尚未提交的事务Session B修改过的数据,那意味着发生了脏写。示意图:

ad21be20438140229da42bf0513106bf.png

2). 脏读(Dirty Read)

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

4dc57c49529b4309a3067c097b7512d1.png

3). 不可重复读(Non-Repeated Read)

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

59533a7cdb5448129150feb144a6a2b5.png

我们在SessionB提交了几个隐式事务(注意是隐式事务,意味着语句结束后自动提交),这些事务都修改了studentno列为1的记录的列name的值,每次事务提交之后,如果SessionA中的事务都可以查看到最新的值,这种现象称为不可重复读。

4). 幻读(Phantom)

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

删除一些记录的情况并不算幻读。

b0c010856e9b4e24b098b9dc4cdd7137.png

2. sql的四种隔离级别

上面介绍了几种并发事务执行过程中可能遇到的一些问题,这些问题又轻重缓急之分,我们会给这些问题按照严重情况排序:脏写>脏读>不可重复读>幻读。

我们愿意舍弃一部分隔离性来换取一部分性能在这里能体现在:设立一些隔离级别,隔离级别越低,并发问题发生的就越多。sql标准中设立了4个隔离级别。

  • READ UNCOMMITTED:读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。不能避免脏读,不可重复读和幻读。
  • READ COMMITTED:读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交的事务所做的改变。这是大多数数据库系统的默认的隔离级别(但不是MySQL默认)。可以避免脏读,但不可重复读和幻读的问题仍然存在。
  • REPEATABLE READ:可重复读。事务A在读到一条数据后,此时事务B对该数据进行了修改并提交,那么事务A再读取数据,读到的还是原来的内容。可以避免脏读,不可重复读,但幻读的问题仍然存在。这是MySQL的默认隔离级别。
  • SERIALIZABLE:可串行化,确保事务可以从一个表中读取相同的行。再这个事务的持续期间,禁止其他事务对该表执行插入删除更新等操作。所有的并发问题都可以避免,但性能十分低下。能避免脏读,不可重复读和幻读。

SQL标准中规定,针对不同的隔离级别,并发事务可以发生不同程度的问题,具体情况如下:

脏写这个问题比较严重,不论哪个隔离级别,都不允许脏写的情况发生。

不同的隔离级别有不同的现象,并有不同的锁和并发机制。

3. MySQL支持的四种隔离机制

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

MySQL默认隔离级别是REPEATABLE READ,我们可以手动修改事务的隔离级别。

查看隔离级别:

# MySQL 5.7.20版本之前:
show variables like 'tx_isolation';

# 之后:
show variables like 'transaction_isolation';

# 不同版本都可以使用:
select @@transaction_isolation;

修改事务隔离级别:

set [global | session] transaction_isolation = '隔离级别';
# 其中隔离级别:
> READ-UNCOMMITTED
> READ-COMMITTED
> REPEATABLE-READ
>SERIALIZABLE

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

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

相关文章

【电子通识】第一、二、三代半导体都是什么?

半导体指常温下导电性能介于导体与绝缘体之间的材料。半导体在集成电路、消费电子、通信系统、光伏发电、照明应用、大功率电源转换等领域应用。 如二极管就是采用半导体制作的器件。无论从科技或是经济发展的角度来看,半导体的重要性都是非常巨大的。 今日大部分的…

opencv入门(二)

文章目录 一、图像的基础操作1.1 图像ROI1.1.1 图像ROI理论介绍1.1.2 图像ROI的具体实现1.2 通道拆分与合并1.2.1 split():拆分通道1.2.2 merge():合并彩色分量图像1.3 图像的加法运算1.3.1 Numpy加法1.3.1 OpenCV加法1.4 图像融合1.4.1 图像加法1.4.2 图像融合1.4.3 注意点1…

sql server 连接报错error 40

做个简单的记录,造成40 的原因有很多,你的错误并不一定就是我遇到的这种情况. 错误描述: 首先我在使用ssms 工具连接的时候是可以正常连接的,也能对数据库进行操作. 在使用 ef core 连接 Sql Server 时报错: Microsoft.Data.SqlClient.SqlException (0x80131904): A network-r…

VIsual Studio:为同一解决方案下多个项目分别指定不同的编译器

一、引言 如上图,我有一个解决方案【EtchDevice】,他包含两个(甚至更多个)子项目,分别是【DeviceRT】和【DeviceWin】,见名知意,我需要一个项目编译运行在RTOS上,譬如一个名叫INTime…

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤!如何选择电子邮件服务商? Mailspring作为一款功能强大、界面友好的邮件客户端,成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程,帮助您打造个性化的邮件体验。 Mailspring搭…

智能APK动态防护系统:自动重命名与签名,实现安全分发

本智能APK动态防护系统通过集成先进的自动化处理技术,实现了对APK文件的深度定制化与安全性强化。系统核心功能包括自动反编译APK、随机生成包名与签名、代码混淆等,最终回编译生成独一无二的APK安装包。这一过程每5分钟(时间间隔可自定义&am…

从java到JDBC学习笔记

java编写代码入门 1. 简介 JDK : Java SE Development Kit Java开发工具 2.第一段代码 main快捷键 msvm加回车 控制台输出 sout回车 删除一行 Ctrly 复制一行 Ctrld 空构造器 altinsert 撤销快捷键 CtrlZ 首先输入psvm创建主程序,我们的代码在这里边编写。…

java面向对象进阶进阶篇--《抽象类和抽象方法》

个人主页VON 所属专栏java从入门到起飞 目录 个人主页​编辑我的主页​编辑 一、简介 抽象方法: 抽象类: 概述: 二、抽象类 特点和用途 示例: Animal类 Dog类 Flog类 Sheep类 Text类 结果展示: 三、抽象方…

鸿蒙OpenHarmony Native API【raw_dir.h与raw_file.h】 头文件

raw_dir.h Overview Related Modules: [Rawfile] Description: 提供rawfile目录相关功能 功能包括遍历和关闭rawfile目录 Since: 8 Version: 1.0 Summary Typedefs Typedef NameDescription[RawDir]typedef struct [RawDir] 提供对rawfile目录的访问 Functions Fun…

Centos7下安装配置最新版本Jenkins

1、基础环境配置 1.1 服务器下载Jenkins安装包 下载地址:Download and deploy 下载命令:wget https://get.jenkins.io/war-stable/2.452.3/jenkins.war 1.2 服务器安装配置JDK Jenkins 是基于 Java 语言开发的,因此需要 Java 运行环境支…

【Mysql】Docker下Mysql8数据备份与恢复

[TOC] 【Mysql】Docker下Mysql8数据备份与恢复 1 创建Mysql容器 格式 docker run -d --name容器名称 -p 宿主端口号:3306 -e MYSQL_ROOT_PASSWORDmysql密码 -e MYSQL_PASSWORDmysql密码 -e TZAsia/Shanghai -v 宿主目录-数据:/var/lib/mysql -v 宿主目录-备份数据:/back…

在vue中优雅地异步引入(懒加载)腾讯地图API

背景 接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。 思路 根据官网的示例,…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

缓存穿透,缓存击穿,缓存雪崩

目录 介绍 缓存穿透 缓存击穿 缓存雪崩 原因 影响 解决方案 缓存穿透 防止缓存穿透->空值缓存案例 缓存击穿 使用互斥锁解决缓存击穿 介绍 缓存穿透 定义:缓存穿透是指用户查询数据,缓存和数据库中都不存在该数据(一般是发起恶意…

Nginx笔记(一)

一、Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 [13],同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.…

maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行

一.背景 在《maven项目容器化运行之1》中,我们开启了1Panel环境中docker构建服务给到了局域网。在《maven项目容器化运行之2》中,我们基本实现了maven工程创建、远程调用docker构建镜像、在1Panel选择镜像运行容器三大步骤。 但是,存在一个问…

影视剪辑(自媒体)工具下载地址

一、资源下载网址 片库(资源较全): 中国大陆线路:https://www.btnull.nuhttps://www.btnull.nuhttps://www.btnull.inhttps://www.btnull.in 其他网址: https://www.btnull.comhttps://www.btnull.com…

Oracle export 时expdp 表顺序每次不同的

同样的expdp 200张表,expdp 的命令一样,但是export log出来的表顺序也是不同的。 expdp parallel 4 impdp parallel 8 也是可以 File Size(MB)Export ElapsedImport ElapsedAKA2865MB0:04:230:20:02imp disable constraint paral…

畅游时空|虚拟世界初体验,元宇宙游戏如何开发?

在元宇宙中,用户可以通过虚拟身份进行互动、社交、工作和娱乐,体验与现实世界平行的生活和活动。元宇宙不仅仅是一个虚拟空间,更是一个融合了虚拟和现实的生态系统,具有巨大的发展潜力和应用前景。 在不断发展的数字环境中&#x…

MySQL的账户管理

目录 1 密码策略 1.1 查看数据库当前密码策略: 1.2 查看密码设置策略 1.3 密码强度检查等级解释(validate_password.policy) 2 新建登录账户 3 账户授权 3.1 赋权原则 3.2 常见的用户权限 3.3 查看权限 3.4 赋权语法 4 实例 4.1 示例1&#x…