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

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

  • 原子性(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.hqwc.cn/news/151909.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法(HeapSort) 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法(HeapSort) 1、说明 堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序…

hdlbits系列verilog解答(模块按位置)-21

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 此问题类似于上一个(模块)。您将获得一个名为的 mod_a 模块,该模块按此顺序具有 2 个输出和 4 个输入。您必须按位置将 6 个端口按该顺序连接到顶级模块的端口 out1 、 out2…

pycharm 2023.2.3设置conda虚拟环境

分两步: (1)设置Virtualenv Environment (2)设值Conda Executable 加载conda环境,然后选择conda环境

仓库管理系统源代码集合,带图片展示和网站演示

目录 1、ModernWMS2、GreaterWMS3、kopSoftWMS4、SwebWMS5、若依wms6、jeewms 1、ModernWMS 体验地址:https://wmsonline.ikeyly.com 简易完整的仓库管理系统 该库存管理系统是,我们从多年ERP系统研发中总结出来的一套针对小型物流仓储供应链流程。 简…

JavaScript基础知识18——逻辑运算符之短路运算

哈喽,大家好,我是雷工。 本节学习JavaScript基础知识——逻辑运算符中的短路运算,以下为学习笔记。 规则: 1、如果是&&运算,只要遇到false,就立即短路,不会再执行了,直接返回…

GPT的广泛应用会对互联网公司造成挑战吗?——探讨GPT在实际使用中的应用和影响

文章目录 前言GPT 技术的背景和发展历程GPT 技术对互联网行业的影响GPT 技术在互联网行业中的应用GPT 技术对于用户隐私和数据安全的威胁GPT 技术对于人类工作岗位的影响加强 AI 伦理和监管加强 AI 安全性和隐私保护推动 AI 创新和发展,避免过度依赖 AIGPT 技术是一…

Android12之#pragma clang diagnostic ignored总结(一百六十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

基于物联网云平台的分布式光伏监控系统的设计与实现

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:针对国内光伏发电监控系统的研究现状,文中提出了基于云平台的光伏发电监控体系。构建基于B/S架构的数据实时采集与推送,以SSH(strutsspringhibernate)作为Web开发框架,开发基…

windows PC virtualBox 配置

效果: oracle vitualbox 可以访问通PC主机,可以访问外网: 注意,如果docker0网络地址,和PC主机的网络地址冲突了,需要变更docker的网络地址: root/home/mysqlPcap/anti-tamper $ cat /etc/docker/daemon.js…

docker 中给命令起别名

docker 的有些命令特别复杂,我们可以给它设置别名简化输入,就不用每次都输入那么多了!!! 1. 进入 .bashrc 中修改配置( .bashrc 是root下的隐藏文件) cd /rootvim .bashrc2. 在 .bashrc 中加入…

iOS iGameGuardian修改器检测方案

一直以来,iOS 系统的安全性、稳定性都是其与安卓竞争的主力卖点。这要归功于 iOS 系统独特的闭源生态,应用软件上架会经过严格审核与测试。所以,iOS端的作弊手段,总是在尝试绕过 App Store 的审查。 常见的 iOS 游戏作弊&#xf…

Linux两条服务器实现相互免密登录

1.准备两台虚拟机,一台充当服务器端(server),一台充当客户端(client) 服务器端(server):192.168.75.139 客户端(client):192.168.75…