详解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 07 MySQL
MySQL创建索引需要了解的
Apr 08 MySQL
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
May 29 MySQL
Mysql文件存储图文详解
Jun 01 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MySQL深分页问题解决思路
Dec 24 MySQL
SQL Server数据库的三种创建方法汇总
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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
php session的应用详细介绍
2017/03/22 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
python连接数据库的方法
2017/10/19 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
java判断三位数的实例讲解
2019/06/10 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Python实现随机爬山算法
2021/01/29 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
行政人事岗位职责
2014/03/17 职场文书
工会换届选举方案
2014/05/21 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python