详解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 28 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
mysql 排序失效
May 20 MySQL
MySQL分布式恢复进阶
Jul 23 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 db类库进行数据库操作
2009/03/19 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
2011/10/15 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
Python随机数random模块使用指南
2016/09/09 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
优秀毕业生自荐信范文
2014/01/01 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
职务说明书范文
2014/05/07 职场文书
教师考核材料
2014/05/21 职场文书
应届生自荐书
2014/06/23 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
小学数学教学随笔
2015/08/14 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
解决Go gorm踩过的坑
2021/04/30 Golang
MySQL读取JSON转换的方式
2022/03/18 MySQL