详解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 16 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
MySQL约束超详解
Sep 04 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
MySQL sql模式设置引起的问题
May 15 MySQL
面试官问我Mysql的存储引擎了解多少
Aug 05 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
js自定义事件代码说明
2011/01/31 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python自动扫雷实现方法
2015/07/25 Python
python八大排序算法速度实例对比
2017/12/06 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
八年级生物教学反思
2014/01/22 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
市场营销工作计划书
2014/05/06 职场文书