确定能搞懂:脏读、读已提交、可重复读、幻读?

确定能搞懂:脏读、读已提交、可重复读、幻读?今天刚好在看某个公众号中提到了这个知识点 发现对这块的解释不是很到位 尤其是对幻读这块的解释 很多文章都是相互复制粘贴 所以我们看到的大部分解释都是类似的 很多人对幻读这款不是很理解 让看的人

大家好,欢迎来到IT知识分享网。

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

主要内容

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

什么是事务?

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

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

何为脏读?

何为读已提交

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

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

何为可重复读

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

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

何为幻读

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

以mysql为例:

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

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

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

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

十年java老兵,只生产干货,公众号:路人甲Java,微信号:itsoku

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117923.html

(0)
上一篇 2025-11-17 09:33
下一篇 2025-11-17 10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信