当前位置:网站首页>脏读、不可重复读和幻读介绍
脏读、不可重复读和幻读介绍
2022-04-23 14:51:00 【顶尖高中生】
在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别。
MySQL 是支持多事务并发执行的。否则来一个事务处理一个请求,处理一个人请求的时候,其它事务都等着,那估计都没人敢用MySQL作为数据库,因为用户体验太差,估计都要砸键盘了。
既然事务可以并发操作,这里就有一些问题:一个事务在写数据的时候,另一个事务要读这行数据,该怎么处理?一个事务在写数据,另一个数据也要写这行数据,又该怎么处理这个冲突?
既然事务可以并发操作,这里就有一些问题:一个事务在写数据的时候,另一个事务要读这行数据,该怎么处理?一个事务在写数据,另一个数据也要写这行数据,又该怎么处理这个冲突?
这就是并发事务所产生的一些问题。具体来说就是:脏读、不可重复读和幻读
脏读
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
例如:
张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。
与此同时,
事务B正在读取张三的工资,读取到张三的工资为8000。
随后,
事务A发生异常,而回滚了事务。张三的工资又回滚为5000。
最后,
事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。
不可重复读
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
例如:
在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。
与此同时,
事务B把张三的工资改为8000,并提交了事务。
随后,
在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。
幻读
是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
例如:
目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。
此时,
事务B插入一条工资也为5000的记录。
这时,
事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。
提醒
不可重复读的重点是修改:
同样的条件,你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除:
同样的条件,第1次和第2次读出来的记录数不一样
版权声明
本文为[顶尖高中生]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_55076626/article/details/124359296
边栏推荐
- do(Local scope)、初始化器、内存冲突、Swift指针、inout、unsafepointer、unsafeBitCast、successor、
- Swift - Literal,字面量协议,基本数据类型、dictionary/array之间的转换
- OC 转 Swift 条件编译、标记、宏、 Log、 版本检测、过期提示
- 【工厂模式详解】工厂方法模式
- 面试官:说一下类加载的过程以及类加载的机制(双亲委派机制)
- 帧同步 实现
- vscode中文插件不生效问题解决
- 中富金石财富班29800效果如何?与专业投资者同行让投资更简单
- epoll 的 ET,LT工作模式———实例程序
- Svn detailed use tutorial
猜你喜欢
随机推荐
QT interface optimization: QT border removal and form rounding
详解TCP的三次握手
1990年1月1日是星期一,定义函数date_to_week(year,month,day),实现功能输入年月日后返回星期几,例如date_to_week(2020,11,1),返回:星期日。 提示:
MDS55-16-ASEMI整流模块MDS55-16
Don't you know the usage scenario of the responsibility chain model?
Detailed comparison between asemi three-phase rectifier bridge and single-phase rectifier bridge
Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
多语言通信基础 06 go实现grpc的四种数据流模式实现
Swift - literal, literal protocol, conversion between basic data types and dictionary / array
go基础 反射
机器学习之逻辑回归(Logistic Regression)原理讲解和实例应用,果断收藏
Swift: entry of program, swift calls OC@_ silgen_ Name, OC calls swift, dynamic, string, substring
Mds55-16-asemi rectifier module mds55-16
One of the advanced applications of I / O reuse: non blocking connect -- implemented using select (or poll)
The art of automation
线程同步、生命周期
LeetCode149-直线上最多的点数-数学-哈希表
1 minute to understand the execution process and permanently master the for cycle (with for cycle cases)
Explain TCP's three handshakes in detail
Parameter stack pressing problem of C language in structure parameter transmission









