详解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获取所有分类的前N条记录
May 07 MySQL
MySQL表字段时间设置默认值
May 13 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
Apr 20 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 MySQL
mysql sql常用语句大全
Jun 21 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 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
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python代码调试的几种方法总结
2015/04/15 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python实现发送邮件及附件功能
2021/03/02 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
JNI的定义
2012/11/25 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
2013的个人自我评价
2013/12/26 职场文书
护理个人求职信范文
2014/01/08 职场文书
企业文化标语口号
2014/06/09 职场文书
解析Java异步之call future
2021/06/14 Java/Android