【数据库】快速理解脏读、不可重复读、幻读
快速理解脏读、不可重复读、幻读?
理解这三种由于并发访问导致的数据读取问题,再理解事务隔离级别就简单多了。
【1】脏读(读取未提交数据)
A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏数据,但事务B良心发现,又用回滚把数据恢复成原来干净、纯粹的样子,而事务A却什么都不知道,最终结果就是事务A读取了此次的脏数据,称为脏读。
这种情况常发生于转账与取款操作中
时间顺序 |
转账事务 |
取款事务 |
1 |
开始事务 |
|
2 |
开始事务 |
|
3 |
查询账户余额为2000元 |
|
4 |
取款1000元,余额被更改为1000元 |
|
5 |
查询账户余额为1000元(产生脏读) |
|
6 |
取款操作发生未知错误,事务回滚,余额变更为2000元 |
|
7 |
转入2000元,余额被更改为3000元(脏读的1000+2000) |
|
8 |
提交事务 |
|
备注 |
按照正确逻辑,此时账户余额应该为4000元 |
【2】不可重复读(前后多次读取,数据内容不一致)
事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,也就是数据不重复了,系统不可以读取到重复的数据,成为不可重复读。
时间顺序 |
事务A |
事务B |
1 |
开始事务 |
|
2 |
第一次查询,小明的年龄为20岁 |
|
3 |
开始事务 |
|
4 |
其他操作 |
|
5 |
更改小明的年龄为30岁 |
|
6 |
提交事务 |
|
7 |
第二次查询,小明的年龄为30岁 |
|
备注 |
按照正确逻辑,事务A前后两次读取到的数据应该一致 |
【3】幻读(前后多次读取,数据总量不一致)
事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。
时间顺序 |
事务A |
事务B |
1 |
开始事务 |
|
2 |
第一次查询,数据总量为100条 |
|
3 |
开始事务 |
|
4 |
其他操作 |
|
5 |
新增100条数据 |
|
6 |
提交事务 |
|
7 |
第二次查询,数据总量为200条 |
|
备注 |
按照正确逻辑,事务A前后两次读取到的数据总量应该一致 |
趁热打铁,既然理解了脏读、不可重复读、幻读,那么接下来看看事务隔离级别是怎么个回事【数据库】事务隔离级别
不可
【数据库】快速理解脏读、不可重复读、幻读相关推荐
- 脏读,不可重复读,幻读区别
脏读 脏读又称无效数据读出.一个事务读取另外一个事务还没有提交的数据叫脏读. 例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Roll ...
- mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解
一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...
- mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...
MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...
- oracle 脏读,脏读 不可重复读 幻读
序言 脏读.不可重复读.幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来 ...
- 脏读,不可重复读,幻读区别和避免
在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题. 名词解析和解决方案 脏读 脏读又称无效数据读出(读出了脏 ...
- 快速理解脏读,不可重复读,幻读
介绍 要聊事务,不可避免的要提到数据库事务的四大特性:ACID atomic consistence isolation durability 先放一个表格,看看4个隔离级别会出现的各种问题,网上的解 ...
- MySQL可重复读和读已提交实现原理,深入理解MVCC。
1.隔离级别 MySQL中隔离级别分为4种,提未交读.读已提交.可重复读.串行化.同时MySQL默认隔离级别为可重复读. 图片 查看MySQL隔离级别 SELECT @@tx_isolation 设置 ...
- Mysql如何实现隔离级别 - 可重复读和读提交 源码分析
Abstract 本文会(1) 演示Mysql的两种隔离级别. (2) 跟着mysql的源代码来看看它是怎么实现这两种隔离级别的. Mysql的隔离级别 当有多个事务并发执行时, 我们需要考虑他们之 ...
- 三分钟了解MVCC(InnoDB如何实现可重复读和读已提交)
快照读和当前读 快照读 快照读是指读取数据时不是读取最新版本的数据,而是基于历史版本读取的一个快照信息(mysql读取undo log历史版本) , 快照读可以使普通的SELECT 读取数据时不用对表 ...
最新文章
- 图论--DFS-SPFA求负环
- mysql数据库的字符串表示什么意思_MySQL数据库的字符串类型详解(01)
- 深入理解JVM虚拟机(七):虚拟机字节码执行引擎
- php遍历一个目录 并重命名
- ngrok服务器搭建_利用暴露在外的API,无法检测的Linux恶意软件将矛头指向Docker服务器...
- Hurst exponent(赫斯特指数)代码与R/S值计算——python
- iphone天行连接不上服务器未响应,天行连接不上 - 卡饭网
- IE和火狐读取XML方法比较
- 去除浏览器输入框等的边框(包括手机浏览器)
- 管理感悟:眼高手低到眼高手高
- 李宏毅:1天搞懂深度学习,我总结了 300 页 PPT(附思维导图PPT)
- 数据库存储大文本类型
- educoder 1-1Python 计算思维训练——公式编程
- 四旋翼飞行器数学模型
- iphone java模拟器_【Mac + Appium + Java1.8学习(三)】之IOS自动化环境安装配置以及简单测试用例编写(模拟器、真机)...
- 变点理论CUSUM在择时交易中的应用
- 谷歌,Google,Chrome,检查工具栏常用功能介绍
- 映象笔记导出到word
- 【数据结构与算法】之深入解析“铺瓷砖”的求解思路与算法示例
- jmeter入门——第一个jmeter脚本