什么是幻读,脏读,不可重复读?事务的各个隔离级别都是如何实现的?
  R4VBsx5oF4Uo 2023年11月02日 27 0

一、什么是幻读,脏读,不可重复读?

事务A、B交替执行,事务A读取到事务B未提交的数据,这就是脏读。

在一个事务范围内,两个相同的查询,读取同一条记录,却返回了不同的数据,这就是不可重复读。

事务A查询一个范围的结果集,另一个并发事务B往这个范围中插入/删除了数据,并悄悄提交,之后事务A再次查询相同范围,两次读取到的结果集不一样,这就是幻读。

不同的隔离级别,在并发事务下可能会发生的问题:

什么是幻读,脏读,不可重复读?事务的各个隔离级别都是如何实现的?_数据

二、事务的各个隔离级别都是如何实现的?

2.1读未提交

采取的是读不加锁的原理。

事务读不加锁,不阻塞其他事务的读和写;

事务写阻塞其他事务写,但不阻塞其他事务读。

2.2 读取已提交&可重复读

读取已提交和可重复读级别利用了ReadView和MVCC,也就是每个事务只能读取它能看到的版本(ReadView)。

READ COMMITTED:每次读取数据前都生成一个ReadView

REPEATABLE READ : 在第一次读取数据时生成一个ReadView

2.3 串行化

串行化的实现采用的是读写都加锁的原理。

串行化的情况下,对于同一行事务,写会加写锁,读会加读锁。

当出现读写锁冲突的时候,后访问的事务必须等待前一个事务执行完成才能继续执行。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
R4VBsx5oF4Uo