当前位置:网站首页>数据库脏读、不可重复读、幻读以及对应的隔离级别
数据库脏读、不可重复读、幻读以及对应的隔离级别
2022-07-30 09:41:00 【小小张自由—>张有博】
目录
可重复读:能够避免脏读、不可重复读,MySQL中Innodb引擎默认的隔离级别
可串行化:可以解决所有读问题,但是由于是串行执行,效能效率比较低
并发读取数据出现的问题
脏读:一个事务读取另一个事务未提交的数据
A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据比较干净、纯粹,此时由于B事务更改了它,这个数据变得不再纯粹。这个时候A事务立即读取了这个脏数据,但事务B良心发现,又用回滚把数据恢复成原来干净、纯粹的样子,而事务A却什么都不知道,最终结果就是事务A读取了此次的脏数据,称为脏读。
幻读:一个事务内进行了多次读取,数据总量不一致
事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。
不可重复读:一个事务对同一数据进行读取,前后数据内容不一致
事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,也就是数据不重复了,系统不可以读取到重复的数据,成为不可重复读。
可以理解为根据同一个Id查询,前后结果不一致
区别:
1.脏读指的是一个事务读到了其他事务未提交的数据。
2.不可重复读指的是一个事务中多次读到同一条数据发生了变化,重点在于表中已经存在的数据被其他事务修改了。
3.幻读指的是一个事务被其他事务插入或者删除的数据有影响,重点在于事务开始后,其他事务插入或删除了数据。
脏读、幻读、不可重复读是在并发事务的情况下才发生的,为了解决这些问题,数据库引入了隔离级别,并且不同的隔离级别可以解决不同的问题。
隔离级别
读未提交:所有读问题都有可能发生,一般不会采取这种隔离级别
在这种隔离级别下,所有事务能够读取其他事务未提交的数据。读取其他事务未提交的数据,会造成脏读。因此在该种隔离级别下,不能解决脏读、不可重复读和幻读。
读已提交:只能避免脏读发生,Oracle默认的隔离级别
在这种隔离级别下,所有事务只能读取其他事务已经提交的内容。能够彻底解决脏读的现象。但在这种隔离级别下,会出现一个事务的前后多次的查询中却返回了不同内容的数据的现象,也就是出现了不可重复读。
可重复读:能够避免脏读、不可重复读,MySQL中Innodb引擎默认的隔离级别
在这种隔离级别下,所有事务前后多次的读取到的数据内容是不变的。也就是某个事务在执行的过程中,不允许其他事务进行update操作,但允许其他事务进行add操作,造成某个事务前后多次读取到的数据总量不一致的现象,从而产生幻读。
可串行化:可以解决所有读问题,但是由于是串行执行,效能效率比较低
在这种隔离级别下,所有的事务顺序执行,所以他们之间不存在冲突,从而能有效地解决脏读、不可重复读和幻读的现象。但是安全和效率不能兼得,这样事务隔离级别,会导致大量的操作超时和锁竞争,从而大大降低数据库的性能,一般不使用这样事务隔离级别。
并发事务下发生的问题与解决方式
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
| 读未提交 | 可能(出现) | 可能 | 可能 |
| 度已提交 | 不可能(出现) | 可能 | 可能 |
| 可重复读 | 不可能 | 不可能 | 可能 |
| 可串行化 | 不可能 | 不可能 | 不可能 |
如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦
边栏推荐
- SST-Calib: A lidar-visual extrinsic parameter calibration method combining semantics and VO for spatiotemporal synchronization calibration (ITSC 2022)
- 快解析结合任我行crm
- Mysterious APT Attack
- Shell系统学习之数组
- Study Notes 11--Direct Construction of Local Trajectories
- EViews 12.0软件安装包下载及安装教程
- 软考 系统架构设计师 简明教程 | 案例分析 | 需求分析
- Baidu promotion assistant encounters duplicate keywords, verification errors, how to delete redundant ones with one click
- shell script
- Meikle Studio - see the actual combat notes of Hongmeng equipment development five - drive subsystem development
猜你喜欢

你真的懂Redis的5种基本数据结构吗?

论文阅读:SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers

Re19: Read the paper Paragraph-level Rationale Extraction through Regularization: A case study on European Court

大数据产品:标签体系0-1搭建实践

A new generation of free open source terminal tool, so cool

(文字)无框按钮设置

leetcode 剑指 Offer 63. 股票的最大利润

Re21: Read the paper MSJudge Legal Judgment Prediction with Multi-Stage Case Representation Learning in the Real

连接mysql报错WARN: Establishing SSL connection without server‘s identity verification is not recommended

The thread pool method opens the thread -- the difference between submit() and execute()
随机推荐
Re17:读论文 Challenges for Information Extraction from Dialogue in Criminal Law
leetcode 剑指 Offer 63. 股票的最大利润
快解析结合泛微OA
Domino Server SSL Certificate Installation Guide
Meikle Studio - see the actual combat notes of Hongmeng device development 4 - kernel development
Domino服务器SSL证书安装指南
4、yolov5-6.0 ERROR: AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘ 解决方案
A near-perfect Unity full-platform hot update solution
快解析结合任我行crm
By building a sequence table - teach you to calculate time complexity and space complexity (including recursion)
Alibaba Cloud OSS Object Storage
Online target drone prompt.ml
EViews 12.0 software installation package download and installation tutorial
BERT预训练模型系列总结
Practical Walkthrough | Calculate Daily Average Date or Time Interval in MySQL
Re16:读论文 ILDC for CJPE: Indian Legal Documents Corpus for Court Judgment Prediction and Explanation
Re16: Read the paper ILDC for CJPE: Indian Legal Documents Corpus for Court Judgment Prediction and Explanation
死锁的理解
你真的懂Redis的5种基本数据结构吗?
105. Construct binary tree from preorder and inorder traversal sequence (video explanation!!)