当前位置:网站首页>脏读、不可重复读和幻读介绍
脏读、不可重复读和幻读介绍
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
边栏推荐
- Daily question - leetcode396 - rotation function - recursion
- 电容
- MySQL error packet out of order
- 51 MCU + LCD12864 LCD Tetris game, proteus simulation, ad schematic diagram, code, thesis, etc
- GIS数据处理-cesium中模型位置设置
- Explain TCP's three handshakes in detail
- Detailed explanation of C language P2 selection branch statement
- 每日一题-LeetCode396-旋转函数-递推
- eolink 如何助力远程办公
- 你还不知道责任链模式的使用场景吗?
猜你喜欢
capacitance
ASEMI整流模块MDQ100-16在智能开关电源中的作用
冰冰学习笔记:一步一步带你实现顺序表
Arduino for esp8266串口功能简介
一款不错的工具:aardio
Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
UML project example -- UML diagram description of tiktok
【STC8G2K64S4】比较器介绍以及比较器掉电检测示例程序
LeetCode149-直线上最多的点数-数学-哈希表
MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program
随机推荐
Programming philosophy - automatic loading, dependency injection and control inversion
Swift:Entry of program、Swift调用OC、@_silgen_name 、 OC 调用Swift、dynamic、String、Substring
LeetCode167-两数之和II-双指针-二分-数组-查找
1990年1月1日是星期一,定义函数date_to_week(year,month,day),实现功能输入年月日后返回星期几,例如date_to_week(2020,11,1),返回:星期日。 提示:
1N5408-ASEMI整流二极管1N5408
we引用My97DatePicker 实现时间插件使用
编程哲学——自动加载、依赖注入与控制反转
自动化的艺术
MySQL报错packet out of order
SVN详细使用教程
51 MCU + LCD12864 LCD Tetris game, proteus simulation, ad schematic diagram, code, thesis, etc
Detailed explanation of C language knowledge points -- first knowledge of C language [1]
Swift protocol Association object resource name management multithreading GCD delay once
When splicing HQL, the new field does not appear in the construction method
[stc8g2k64s4] introduction of comparator and sample program of comparator power down detection
你还不知道责任链模式的使用场景吗?
On the insecurity of using scanf in VS
Contraction mapping theorem
Introduction to Arduino for esp8266 serial port function
压缩映射定理