mysql脏读、幻读、不可重复读

本文涉及的产品
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 1. 脏读:读到了其他事务还没有提交的数据。2. 不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。这是因为有其他事务对这个数据同时进行了修改或删除。3. 幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读。

脏读:

有个英雄表如下图所示

第一天 小张 往里面插入数据:

BEGIN;INSERTINTO heros_temp values(4,'吕布');

小张还没有提交事务的时候,小李对数据表进行了访问,小张看到的结果如下

小李读到了小张还没有提交的数据,我们称之为“脏读”

不可重复读

小张想查看 id=1 的英雄是谁,于是他进行了 SQL 查询:

SELECT name FROM heros_temp WHERE id =1;

然而此时,小李开始了一个事务操作,他对 id=1 的英雄姓名进行了修改,把原来的“张飞”改成了“张翼德”:

BEGIN;UPDATE heros_temp SET name ='张翼德'WHERE id =1;

然后小张再一次进行查询,同样也是查看 id=1 的英雄是谁:

运行结果:

这个时候你会发现,两次查询的结果并不一样。小张会想这是怎么回事呢?他明明刚执行了一次查询,马上又进行了一次查询,结果两次的查询结果不同。实际上小张遇到的情况我们称之为“不可重复读”,也就是同一条记录,两次读取的结果不同。

幻读

小张想要看下数据表里都有哪些英雄

这时当小张执行完之后,小李又开始了一个事务,往数据库里插入一个新的英雄“吕布”

BEGIN;INSERTINTO heros_temp values(4,'吕布');

小张这时忘记了英雄都有哪些,又重新执行了一遍查询:

他发现这一次查询多了一个英雄,原来只有 3 个,现在变成了 4 个。这种异常情况我们称之为“幻读”。

总结

  1. 脏读:读到了其他事务还没有提交的数据。
  2. 不可重复读:对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。这是因为有其他事务对这个数据同时进行了修改或删除。
  3. 幻读:事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL Java 关系型数据库
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(二)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
|
Java 关系型数据库 MySQL
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字(一)
|
SQL 关系型数据库 MySQL
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
210 0
|
关系型数据库 MySQL 数据库
MySQL的脏读、幻读、不可重复度是什么
**脏读**:事务读取了未提交的修改,可能导致不一致。**不可重复读**:同一事务中相同查询返回不同结果,因其他事务修改。**幻读**:事务在范围查询时,另一事务插入数据,使行数不一致。SQL-92定义四种事务隔离级别来防止这些问题:序列化、可重复读、提交读、未提交读。
349 4
|
SQL 关系型数据库 MySQL
【MySQL】脏读、不可重复读、幻读介绍及代码解释
【MySQL】脏读、不可重复读、幻读介绍及代码解释
|
存储 SQL 关系型数据库
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
955 0
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
|
关系型数据库 MySQL
【面试题精讲】MySQL-事务隔离-不可重复读
【面试题精讲】MySQL-事务隔离-不可重复读
|
数据库
【面试题精讲】MySQL-事务隔离-脏读
【面试题精讲】MySQL-事务隔离-脏读
|
8月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
517 158

推荐镜像

更多