详解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 12 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
MySQL系列之十四 MySQL的高可用实现
Jul 02 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySql统计函数COUNT的具体使用详解
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
深入了解php4(2)--重访过去
2006/10/09 PHP
在线增减.htpasswd内的用户
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
php的dl函数用法实例
2014/11/06 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python自动翻译实现方法
2016/05/28 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python环境变量设置方法
2016/08/28 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
关于python字符串方法分类详解
2019/08/20 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
详解python内置模块urllib
2020/09/09 Python
python的链表基础知识点
2020/09/13 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
卫校护理专业毕业生求职信
2013/11/26 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
Apache自带的ab压力测试工具的实现
2022/07/23 Servers