详解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 05 MySQL
MySQL Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
MySQL 分页查询的优化技巧
May 12 MySQL
52条SQL语句教你性能优化
May 25 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL日期时间函数知识汇总
Mar 17 MySQL
实战 快速定位MySQL的慢SQL
Mar 22 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
详解Mysq MVCC多版本的并发控制
Apr 29 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 memcache扩展的三种安装方法
2009/04/26 PHP
php curl选项列表(超详细)
2013/07/01 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python守护进程用法实例分析
2015/06/04 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android