保姆级教程,终于搞懂脏读、幻读和不可重复读了!(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 保姆级教程,终于搞懂脏读、幻读和不可重复读了!(1)

我的文章合集:https://gitee.com/mydb/interview


在 MySQL 中事务的隔离级别有以下 4 种:


  1. 读未提交(READ UNCOMMITTED)


  1. 读已提交(READ COMMITTED)


  1. 可重复读(REPEATABLE READ)


  1. 序列化(SERIALIZABLE)


MySQL 默认的事务隔离级别是可重复读(REPEATABLE READ),这 4 种隔离级别的说明如下。


1.READ UNCOMMITTED


读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读。


2.READ COMMITTED


读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读。


3.REPEATABLE READ


可重复读,是 MySQL 的默认事务隔离级别,它能确保同一事务多次查询的结果一致。但也会有新的问题,比如此级别的事务正在执行时,另一个事务成功的插入了某条数据,但因为它每次查询的结果都是一样的,所以会导致查询不到这条数据,自己重复插入时又失败(因为唯一约束的原因)。明明在事务中查询不到这条信息,但自己就是插入不进去,这就叫幻读 (Phantom Read)。


4.SERIALIZABLE


序列化,事务最高隔离级别,它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题,但因为执行效率低,所以真正使用的场景并不多。


简单总结一下,MySQL 的 4 种事务隔离级别对应脏读、不可重复读和幻读的关系如下:


image.png


只看以上概念会比较抽象,接下来,咱们一步步通过执行的结果来理解这几种隔离级别的区别。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL Java 关系型数据库
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
|
Java 关系型数据库 MySQL
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
|
2月前
|
存储 监控 关系型数据库
如何避免脏读
【10月更文挑战第17天】如何避免脏读
|
7月前
|
SQL 关系型数据库 MySQL
分布式事物【 认识事物、脏写、脏读、不可重复读、幻读】(一)-全面详解(学习总结---从入门到深化)
分布式事物【 认识事物、脏写、脏读、不可重复读、幻读】(一)-全面详解(学习总结---从入门到深化)
160 1
分布式事物【 认识事物、脏写、脏读、不可重复读、幻读】(一)-全面详解(学习总结---从入门到深化)
|
数据库
数据库系列课程(14)-脏读、不可重复读、幻读
数据库系列课程(14)-脏读、不可重复读、幻读
55 0
|
SQL 存储 NoSQL
「数据库架构」三分钟搞懂事务隔离级别和脏读
「数据库架构」三分钟搞懂事务隔离级别和脏读
图解脏读、幻读、不可重复读
图解脏读、幻读、不可重复读
81 0
|
缓存 Java 数据库
先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制
先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制
173 0
先了解清楚 脏读、不可重复读、幻读,再谈事务隔离机制
|
关系型数据库 数据库 索引
幻读是啥,会有什么问题?如何解决?
大家好,我是Leo,上篇文章大概介绍了为什么查询一条记录性能慢的原因。今天我们介绍一下幻读的一些相关知识,以及幻读相关的间隙锁,间隙锁死锁的解决方案。
幻读是啥,会有什么问题?如何解决?
|
SQL 关系型数据库 MySQL
幻读和不可重复读的区别
本文只讨论 MySQL InnoDB 的情况。
156 0
幻读和不可重复读的区别