详解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执行过程以及顺序
May 12 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
mysq启动失败问题及场景分析
Jul 15 MySQL
sql注入教程之类型以及提交注入
Aug 02 MySQL
MySQL对数据表已有表进行分区表的实现
Nov 01 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
排查MySQL生产环境索引没有效果
Apr 11 MySQL
MySQL的存储过程和相关函数
Apr 26 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
在Debian系统下配置LNMP的教程
2015/07/09 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
js切换div css注意的细节
2012/12/10 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
详解js的六大数据类型
2016/12/27 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
wxPython 入门教程
2008/10/07 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python搜索包的路径的实现方法
2019/07/19 Python
python实现滑雪游戏
2020/02/22 Python
Python 使用office365邮箱的示例
2020/10/29 Python
自荐信怎么写呢?
2013/12/09 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
个人投资计划书
2014/05/01 职场文书
先进个人材料怎么写
2014/12/30 职场文书
大学生暑期实践报告
2015/07/13 职场文书