【MySQL】并发事务产生的问题及事务隔离级别

news2024/11/16 0:45:23

先来复习一下事务的四大特性:

  • 原子性(Atomicity):事务是不可分割的最小操作单位,事务中的所有操作要么全部执行成功,要么全部失败回滚,不能只执行其中一部分操作。
  • 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏,数据总是从一个一致性状态转移到另一个一致性状态。例如,如果一个事务要求将某个账户的金额从 A 转移到 B,那么无论事务是否成功,最终账户 A 和账户 B 的总金额应该保持不变。
  • 隔离性(Isolation):事务之间是相互隔离的,事务可以在不受外部并发操作的影响的独立环境下运行。
  • 持久性(Durability):事务完成后(进行提交或者回滚操作),对数据库的修改将永久保存在数据库中,即使系统故障也不会丢失。因为数据库最终的数据是存储到磁盘上的。

并发事务产生的问题

:通俗一点就是两个事务在操作同一个数据库或者是同一张表时所引发的问题。

大致分为以下三种,脏读,不可重复读,幻读。

问题描述
脏读一个事务读到另一个事务还没提交的数据。
不可重复读  一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现”幻觉“

脏读

上图中事务A内部会执行三次任务(三次完成后事务A才会进行提交操作),事务A先执行了任务1(查询id为1的数据),任务2(修改id为1的数据)。事务A在执行完任务2后,事务B紧接着进行了查询id为1的操作,这时查询的数据是事务A为提交之前的数据,这个数据就是”脏“的,简称脏读。

不可重复读

在事务A第一次进行查询id为1的数据的时候,查询到了结果集1,然后在事务A再次执行查询id为1的数据的之前,事务B对id为1的数据进行了修改,并提交了事务B。这时候事务A再次查询id为1的数据时候就查询出了结果集2,两次结果集不同,这就是不可重复读。

幻读

事务的隔离级别

 查看事务的隔离级别:

mysql> select @@Transaction_isolation;
+-------------------------+
| @@Transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

设置当前会话的隔离级别:

SET session TRANSACTION ISOLATION LEVEL 隔离级别;

 如果是想在某个事务中设置隔离级别而不想影响别的事务和会话的话可以不用加session:

SET TRANSACTION ISOLATION LEVEL 隔离级别;

 先来看下这组区别。以下就这组区别分别进行对比操作:

 读未提交(read uncommitted)

 读未提交 相比 读已提交 存在脏读问题: 

 脏读演示:

 读已提交(read committed)

 读已提交 相比 可重复读 存在不可重复读问题,但是解决了脏读问题:

解决脏读问题演示:

 不可重复读演示:

可重复读(repeatable-read)(默认)

可重复读 相比 串行化 存在幻读的问题,但是解决了不可重复读的问题:

 解决不可重复读问题展示:

存在幻读:

串行化(serializable)

小结

MySQL 中的事务隔离级别,主要有读未提交、读已提交、可重复度和串行化。这些隔离级别与问题的对应关系如下:

其中,读未提交的性能是最高的,但是安全性和隔离性是最差的,

而串行化则相反,安全性和隔离性最高,但是性能最低。

事务隔离级别脏读不可重复读幻读
读未提交(read uncommitted)
读已提交(read committed)×
可重复读(repeatable-read)(默认)××
串行化(serializable)×××

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

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

相关文章

vue2组件库-上传组件

vue2组件库 上传组件 核心思路:监控整个上传的流程 上传成功 上传失败 类型:拖拽 多个文件上传 上传必备属性 & 钩子属性 跟上传强关联的属性,上传必备的字段 name: 提交的那个formData字段名 action:ajax接口路径 limit&…

如何中断一个正在运行的线程?

线程 线程是系统级别的概念,在 Java 里面实现的线程,最终的执行和调度都是由操作系统来决定的,JVM 只是对操作系统层面的线程做了一层包装而已。所以我们在 Java 里面通过 start 方法启动一个线程的时候,只是告诉操作系统这个线程…

R语言入门看这一章就够了(上)

目录 一、R的基础 1.1、R的安装 1.2、牛刀小试 1.3、线性关系实例 1.4、工作空间 1.5、R包的使用 包的安装 结果的重用 二、R数据集 2.1、向量 2.2、矩阵 2.3、数组 2.4、数据框 2.5、列表 三、R的常用命令 四、list列表详解 五、数据源导入方法 5.1、键盘输…

黔院长 | 黄帝内经:人有四经十二从!

"人有四经十二从"这句话出自《黄帝内经素问》,“四经”指的是与四时相应的正常脉象,也是指四个主要经络:太阳经、少阳经、太阴经和少阴经。在中医理论当中这些经络被认为是人体气血运行的通道。 而“十二从”则表示人体的十二个经脉…

VulnHub Metasploitable-2

一、信息收集 nmap扫描 访问80端口 二、漏洞利用 1.漏洞一 1.vsftpd 2.3.4(CVE-2011-2523) 2.msf msf6 > search vsftpd msf6 > use 0 msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set rhosts 192.168.103.189 msf6 exploit(unix/ftp/vs…

ATV32变频器在堆垛机应用

一、机型介绍: 目前国内物流行业发展速度很快,特别是在自动仓库这一块,自动仓库用的最多是堆垛机,自动仓库目前驱动用得基本上变频器。品牌基本是丹佛斯、日系及其他等重载系列变频器。设备主要包括:提升机、货叉及行…

【Java题】输出基本数据类型的最大值和最小值,以及float和double的正无穷大值和负无穷大值

一:代码 public class Test {public static void main(String[] args) {//输出byte型的最大值与最小值System.out.println(Byte.MAX_VALUE);System.out.println(Byte.MIN_VALUE);//输出short型的最大值与最小值System.out.println(Short.MAX_VALUE);System.out.pri…

2023-2024 年最佳 6 款数据恢复软件免费在线下载

如果您正在寻找在线数据恢复工具来帮助自己摆脱数据丢失的麻烦,这篇文章可以为您提供帮助。我们讲解如何免费在线恢复数据,并从兼容性、适用性、易用性、价格等角度分享了市场上六款著名的数据恢复软件。每个在线恢复工具都是安全的,并且可以…

植物大战僵尸 forMac/Windows系统中文版:一场惊心动魄的生存之战

在充满惊喜与挑战的《植物大战僵尸》游戏中,一场奇妙的生存之战正等待着你。为了保护你的大脑,你必须组建一支植物军队,利用各种独特的植物和能力,抵御一波又一波的僵尸大军。现在就让我们深入了解这款引人入胜的游戏,…

【C++】Linux下如何查看opencv的版本

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Bootstrap的咖啡网站实例代码阅读笔记

目录 01-index.html的完整代码02-图片可以通过类 rounded-circle 设置为圆形显示03-<li class"nav-item mt-1 a">中&#xff0c;类mt-1是什么意思&#xff1f;类a又是什么意思&#xff1f;04-href"javascript:void(0);"是什么意思&#xff1f;05-类f…

Java 浅拷贝会带来的问题

Java 浅拷贝会带来的问题 一&#xff0c;常见问题 Java 中的浅拷贝是指在对象拷贝时&#xff0c;只复制对象的引用&#xff0c;而不是对象本身。这意味着浅拷贝会导致多个对象共享同一块内存空间&#xff0c;当一个对象修改共享内存时&#xff0c;其他对象也会受到影响。 下…

Ubuntu下使用Docker的简单命令

1&#xff1a;要在Ubuntu下使用Docker首先需要提权&#xff0c;Ubuntu下root是没有密码的。注意前导符的变化$是普通用户&#xff0c;#是管理员。 sudo -i2&#xff1a;运行一个容器。-d是后台运行&#xff0c;-p是把http的端口号由80变成8080。 docker run -d -p 8080:80 ht…

php之 角色的权限管理(RBAC)详解

RBAC&#xff08;Role-based access control&#xff09;是一种常见的权限管理模型&#xff0c;通过将用户分配至特定的角色&#xff0c;以及为角色分配访问权限&#xff0c;实现了权限管理的目的。以下是关于RBAC的详细解释&#xff1a; 角色&#xff1a;RBAC模型的核心是角色…

[RISC-V]verilog

小明教IC-1天学会verilog(7)_哔哩哔哩_bilibili task不可综合&#xff0c;function可以综合

FL Studio21水果编曲软件如何切换成官方中文版

FL studio又被国内网友称之为水果音乐制作软件21版本&#xff0c;是Image-Line公司成立23周年而发布的一个版本&#xff0c;FL studio中文版是目前互联网上最优秀的完整的软件音乐制作环境或数字音频工作站&#xff0c;FL Studio包含了编排&#xff0c;录制&#xff0c;编辑&am…

面试题:百万数据的导入导出解决方案,怎么设计?

文章目录 前景1 传统POI的的版本优缺点比较HSSFWorkbookXSSFWorkbookSXSSFWorkbook 2 使用方式哪种看情况3 百万数据导入导出&#xff08;正菜&#xff09;想要解决问题我们首先要明白自己遇到的问题是什么&#xff1f;解决思路&#xff1a;3.1 EasyExcel 简介3.2 300w数据导出…

P1494 [国家集训队] 小 Z 的袜子

这一题是一个关于多次查询区间状态的一个问题&#xff0c;暴力肯定会超限&#xff0c;但是可以用莫队来优化暴力。 莫队的思想就是&#xff0c;用上一个区间的状态来更新当前区间的状态。 问题就是状态怎么更新以及求出当前区间的状态、也就是有多少对相同的袜子以及总共有多…

禁止chrome浏览器更新方式

1、禁用更新服务 WinR调出运行&#xff0c;输入services.msc&#xff0c;进入服务。 在服务中有两个带有Google Update字样&#xff0c;双击打开后禁用&#xff0c;并把恢复选项设置为无操作。 2、删除计划任务 运行taskschd.msc&#xff0c;打开计划任务程序库&#xff0c;在…

uniapp 中添加 vconsole

uniapp 中添加 vconsole 一、安装 vconsole npm i vconsole二、使用 vconsole 在项目的 main.js 文件中添加如下内容 // #ifdef H5 // 提交前需要注释 本地调试使用 import * as vconsole from "vconsole"; new vconsole() // 使用 vconsole // #endif三、成功