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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
简介: **脏读**:事务读取了未提交的修改,可能导致不一致。**不可重复读**:同一事务中相同查询返回不同结果,因其他事务修改。**幻读**:事务在范围查询时,另一事务插入数据,使行数不一致。SQL-92定义四种事务隔离级别来防止这些问题:序列化、可重复读、提交读、未提交读。

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

不可重复读:在对数据进行读取的过程中,有其他事务对数据进行了修改(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)。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10月前
|
SQL Java 关系型数据库
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
|
10月前
|
Java 关系型数据库 MySQL
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL】脏读、不可重复读、幻读介绍及代码解释
【MySQL】脏读、不可重复读、幻读介绍及代码解释
|
3月前
|
SQL 关系型数据库 MySQL
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
42 0
|
3月前
|
存储 SQL 关系型数据库
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
105 0
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
|
10月前
|
数据库
【面试题精讲】MySQL-事务隔离-脏读
【面试题精讲】MySQL-事务隔离-脏读
|
12月前
|
关系型数据库 MySQL 数据库
数据库事务的陷阱:探讨MySQL脏读现象
在数据库系统中,事务是一种用于管理和维护数据完整性的机制。然而,在多用户并发访问数据库的情况下,可能会出现各种隔离性问题,其中之一就是脏读。脏读是指在事务A修改了数据,但事务B在事务A提交之前读取了这些未提交的数据,从而导致事务B读取到了不正确的数据。在MySQL数据库中,脏读是一个需要特别关注的问题。
197 0
|
Oracle 关系型数据库 MySQL
mysql数据库事务脏读、不可重复度、幻读详解
mysql数据库事务脏读、不可重复度、幻读详解
117 0
|
SQL 关系型数据库 MySQL
MySQL 事务隔离级别以及脏读,不可重复读,幻读
MySQL 事务隔离级别以及脏读,不可重复读,幻读
96 0
|
SQL 关系型数据库 MySQL
【Mysql】数据库事务,脏读、幻读、不可重复读
【Mysql】数据库事务,脏读、幻读、不可重复读
【Mysql】数据库事务,脏读、幻读、不可重复读

相关产品

  • 云数据库 RDS MySQL 版