前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >确定能搞懂幻读?

确定能搞懂幻读?

作者头像
路人甲Java
发布2019-12-11 14:51:33
5470
发布2019-12-11 14:51:33
举报
文章被收录于专栏:路人甲Java

今天刚好在看某个公众号中提到了这个知识点,发现对这块的解释不是很到位,尤其是对幻读这块的解释,很多文章都是相互复制粘贴,所以我们看到的大部分解释都是类似的,很多人对幻读这款不是很理解,让看的人云里雾里、晕晕乎乎,所以拿出来说明一下;大家也可以留言,相互交流。

主要内容

本文以mysqlsql为例,介绍如下内容: 1、什么是脏读? 2、什么是读已提交? 3、什么是可重复读? 4、什么是幻读?

脏读、读已提交、可重复读、幻读都是和事务隔离级别相关的一些东西,所以需要大家先理解事务相关的一些概念。

什么是事务?

我们这里所说的事务大多数是指数据的事务,事务是指一个业务操作,一个业务操作内部包含多个小的子操作,这些操作要目全部一起执行成功,要么全部执行失败,不存在说一部分成功一部分失败的情况。

事务有以下特性(ACID): 1、原子性(Atomicity) 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

2、一致性(Consistency) 事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

3、隔离性(Isolation) 多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

4、持久性(Durability) 已被提交的事务对数据库的修改应该永久保存在数据库中

何为脏读?

一个事务在执行的过程中读取到了其他事务还没有提交的数据。 这个还是比较好理解的。

何为读已提交

从字面上我们就可以理解,即一个事务操作过程中可以读取到其他事务已经提交的数据。

事务中的每次读取操作,读取到的都是数据库中其他事务已提交的最新的数据(相当于当前读)

何为可重复读

一个事务操作中对于一个读取操作不管多少次,读取到的结果都是一样的。

可重复读中有种情况需要注意 如,事务A: 1、打开事务 2、select count(id) from t_a,返回10行 3、向A表插入一条记录 4、select count(id) from t_a,返回11行 5、提交事务

有疑问? 上面不是说可重复读不管读取多少次,结果都是一样的,这个地方为什么不一样呢? 可重复读是指对于其他事务操作的数据,多次读取的结果都是一样的,重点在于其他事务的数据,如果第一次读取能够读取到其他事务的数据,后面不管其他事务有任何其他任何操作,都不会影响已读取到的其他事务产生的数据。但是自己所在的事务中产生的数据,自己是都可以读取到的。

何为幻读

脏读、不可重复读、可重复读、幻读,其中最难理解的是幻读

以mysql为例:

幻读在可重复读的模式下才会出现,其他隔离级别中不会出现

幻读现象例子: 可重复读模式下,比如有个用户表,手机号码为主键,有两个事物进行如下操作

事务A操作如下: 1、打开事务 2、查询号码为X的记录,不存在 3、插入号码为X的数据,插入报错(为什么会报错,先向下看) 4、查询号码为X的记录,发现还是不存在(由于是可重复读,所以读取记录X还是不存在的)

事物B操作:在事务A第2步操作时插入了一条X的记录,所以会导致A中第3步插入报错(违反了唯一约束)

上面操作对A来说就像发生了幻觉一样,明明查询X(A中第二步、第四步)不存在,但却无法插入成功

幻读可以这么理解:事务中后面的操作(插入号码X)需要上面的读取操作(查询号码X的记录)提供支持,但读取操作却不能支持下面的操作时产生的错误,就像发生了幻觉一样。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 路人甲Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要内容
  • 什么是事务?
  • 何为脏读?
  • 何为读已提交
  • 何为可重复读
  • 何为幻读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档