详解Mysql事务并发(脏读、不可重复读、幻读)


Posted in MySQL onApril 29, 2022

Mysql的事务隔离级别

详解Mysql事务并发(脏读、不可重复读、幻读)

Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读、不可重复读、幻读的问题。

脏读

详解Mysql事务并发(脏读、不可重复读、幻读)

大家看一下,我们有两个事务,一个是 Transaction A,一个是 Transaction B,在第一个事务里面,它首先通过一个 where id=1 的条件查询一条数据,返回 name=Ada,age=16 的这条数据。然后第二个事务呢,它同样地是去操作 id=1 的这行数据,它通过一个 update 的语句,把这行 id=1 的数据的 age 改成了 18,但是大家注意,它没有提交。这个时候,在第一个事务里面,它再次去执行相同的查询操作,发现数据发生了变化,获取到的数据 age 变成了 18。那么,这种在一个事务里面,由于其他的时候修改了数据并且没有提交,而导致了前后两次读取数据不一致的情况,这种事务并发的问题,我们把它定义成脏读。

不可重复读

详解Mysql事务并发(脏读、不可重复读、幻读)

同样是两个事务,第一个事务通过 id=1 查询到了一条数据。然后在第二个事务里面执行了一个 update 操作,这里大家注意一下,执行了 update 以后它通过一个 commit提交了修改。然后第一个事务读取到了其他事务已提交的数据导致前后两次读取数据不一致的情况,就像这里,age 到底是等于 16 还是 18,那么这种事务并发带来的问题,我们把它叫做不可重复读。

幻读

在第一个事务里面我们执行了一个范围查询,这个时候满足条件的数据只有一条。在第二个事务里面,它插入了一行数据,并且提交了。重点:插入了一行数据。在第一个事务里面再去查询的时候,它发现多了一行数据。

详解Mysql事务并发(脏读、不可重复读、幻读)

一个事务前后两次读取数据数据不一致,是由于其他事务插入数据造成的,这种情况我们把它叫做幻读。

总结

不可重复读是修改或者删除,幻读是插入。 无论是脏读,还是不可重复读,还是幻读,它们都是数据库的读一致性的问题,都是在一个事务里面前后两次读取出现了不一致的情况。

到此这篇关于Mysql事务并发脏读+不可重复读+幻读详解的文章就介绍到这了!


Tags in this post...

MySQL 相关文章推荐
Mysql - 常用函数 每天积极向上
Apr 05 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
SQL基础的查询语句
Nov 11 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
MySQL索引失效十种场景与优化方案
May 08 MySQL
MySQL 条件查询的常用操作
Apr 28 #MySQL
mysql 子查询的使用
Apr 28 #MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
Apr 26 #MySQL
优化Mysql查询的示例
Apr 26 #MySQL
MySQL的存储过程和相关函数
Apr 26 #MySQL
mysql 索引的数据结构为什么要采用B+树
MySQ InnoDB和MyISAM存储引擎介绍
You might like
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
php中上传文件的的解决方案
2018/09/25 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python中pygame安装方法图文详解
2015/11/11 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
学生干部的自我评价分享
2014/01/18 职场文书
第二课堂活动总结
2014/05/07 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
大学副班长竞选稿
2015/11/21 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书