✅MySQL的脏读、幻读、不可重复度是什么

简而言之

脏读:指读取了其他事务尚未提交的数据,可能导致不一致性。

不可重复读:在对数据进行读取的过程中,有其他事务对数据进行了修改(UPDATE、DELETE),导致第二次读取的结果与第一次不一致。

幻读:指一个事务在进行范围查询时,另一个事务在该范围内进行新增操作(INSERT),导致范围查询的结果数目不一致。

什么是脏读

脏读又称为无效数据读取,指在数据库访问中,事务T1修改了某个数值,随后事务T2读取了该数值,而后因某种原因,T1撤销了对该数值的修改,导致T2读取到的数据变为无效。

具体而言,脏读是指一个事务正在访问数据并对其进行修改,但这些修改尚未提交到数据库中。此时,另一个事务也访问该数据,并使用了它。由于这些数据尚未提交,另一个事务所读取的数据就会成为脏数据,基于这些脏数据所做的操作可能会产生不正确的结果。

什么是幻读

幻读是指在事务非独立执行时出现的现象,举例来说,第一个事务对表中的数据进行了修改,涉及到表中的"全部数据行"。与此同时,第二个事务也修改了该表的数据,插入了"一行新数据"。随后,操作第一个事务的用户发现表中仍然存在未修改的数据行,就好像出现了幻觉一般。

一般解决幻读的方法是通过增加范围锁(RangeS),将检测锁的范围限定为只读,这样便可以避免幻读的发生。

值得注意的是,幻读是不可重复读的一种特殊情况:在事务没有获取范围锁的情况下执行SELECT ... WHERE操作时可能会导致幻读现象的发生。

什么是不可重复读

不可重复读是指在数据库访问中,一个事务内进行两次相同的查询却返回了不同的数据。这种现象是由于系统中其他事务的提交修改所引起的。例如,事务T1读取某一数据,事务T2读取并修改了该数据,随后T1为了检验读取值再次读取该数据,结果获取到不同的数值。

更通俗易懂的说法是:在一个事务中多次读取同一数据,在该事务未结束之前,另一个事务也访问同一数据。在第一个事务两次读取数据之间,由于第二个事务的修改,导致第一个事务读取到的数据可能不同,这就导致了在同一个事务内两次读取数据的结果不一致,因此称为不可重复读,即原始读取结果不可重复。

扩展知识之事务隔离级别

脏读、不可重复读和幻读这三种异常现象是在SQL-92标准中定义的,同时,SQL-92标准还确定了4种隔离级别来处理这些异常情况,按照严格程度从高到低排列分别为:顺序执行(Serializable )、可重复读(Repeatable reads )、提交读(Read committed )、未提交读(Read uncommitted)。

如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或微信搜索【码上遇见你】。

免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

相关推荐
神奇的程序员23 分钟前
从已损坏的备份中拯救数据
运维·后端·前端工程化
oden1 小时前
AI服务商切换太麻烦?一个AI Gateway搞定监控、缓存和故障转移(成本降40%)
后端·openai·api
李慕婉学姐2 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043732 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
用户47949283569152 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
沐雪架构师3 小时前
大模型Agent面试精选15题(第四辑)-Agent与RAG(检索增强生成)结合的高频面试题
面试·职场和发展
未若君雅裁3 小时前
JVM面试篇总结
java·jvm·面试
YoungHong19923 小时前
面试经典150题[072]:从前序与中序遍历序列构造二叉树(LeetCode 105)
leetcode·面试·职场和发展
招风的黑耳3 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
Miss_Chenzr3 小时前
Springboot优卖电商系统s7zmj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端