快速了解什么是脏读、幻读、不可重复读、丢失修改

目录

脏读

丢失修改

不可重复读

 幻读

不可重复读和幻读有什么区别?


各位小伙伴们,我又又又来更新啦!刚刚在研究脏读、幻读、不可重复读时给自己搞懵了,所以写一篇文章来记录一下这些是怎么使用的,话不多说,学习开始!

脏读

一个事务读取数据并对数据进行了修改,即使没有提交,这个修改对其他事务来说是可见的,这时另外一个事务读取了还没有提交的数据,但第一个事务进行了回滚,导致数据并没有被提交到数据库,那么第二个事务读取的数据就是脏数据,这就是脏读

解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。

例如:事务 1 读取某表中的数据 A=20,事务 1 修改 A=A-1,事务 2 读取到 A = 19,事务 1 回滚导致对 A 的修改并未提交到数据库, A 的值还是 20。

丢失修改

在一个事务读取数据时,另一个事务也读取该数据,那么第一个事务修改了这个数据后,第二个事务也修改了数据,这样第一个事务的修改结果就会被丢弃,因此称为丢失修改

例如:事务 1 读取某表中的数据 A=20,事务 2 也读取 A=20,事务 1 先修改 A=A-1,事务 2 后来也修改 A=A-1,最终结果 A=19,事务 1 的修改被丢失。

不可重复读

是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

解决方法不可重复读的解决方法是 设置更高的事务隔离级别,如 可重复读 (Repeatable Read) 或 串行化 (Serializable),以确保在事务 A 执行期间数据不会被其他事务修改

例如:事务 1 读取某表中的数据 A=20,事务 2 也读取 A=20,事务 1 修改 A=A-1,事务 2 再次读取 A =19,此时读取的结果和第一次读取的结果不同。

 幻读

与不可重复读类似。它发生在一个事务读取了几行数据,接着另一个并发事务插入了一些数据时。在随后的查询中,第一个事务就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题。

例如:事务 2 读取某个范围的数据,事务 1 在这个范围插入了新的数据,事务 2 再次读取这个范围的数据发现相比于第一次读取的结果多了新的数据。

不可重复读和幻读有什么区别?

现象区别

不可重复读:在一个事务中,多次读取同一行数据,却得到不同的结果。这通常是因为其他事务对该行数据进行了更新操作并提交,从而导致当前事务再次读取时数据发生了改变。

幻读:一个事务在执行相同的查询时,由于其他事务插入或删除了符合查询条件的新行,导致前后两次查询结果集的行数不同,就好像出现了 “幻影” 行一样。

侧重点区别

不可重复读:侧重于数据的更新操作,关注的是同一行数据在多次读取时内容发生了变化。

幻读:侧重于数据的插入和删除操作,强调的是查询结果集的行数发生了变化。

解决方式区别

不可重复读:可以通过设置事务隔离级别为 “可重复读(REPEATABLE READ)” 来解决。在该隔离级别下,事务在执行期间会对读取的数据加共享锁,防止其他事务对这些数据进行更新操作,从而保证在同一个事务中多次读取同一行数据的结果是一致的。

幻读:在 “可重复读” 隔离级别下,幻读问题仍然可能存在。要解决幻读问题,需要将事务隔离级别提升到 “串行化(SERIALIZABLE)”。在串行化隔离级别下,事务会对查询的范围加锁,阻止其他事务在该范围内插入或删除数据,从而避免幻读的发生。不过,这种隔离级别会极大地降低并发性能。在 MySQL 的 InnoDB 存储引擎中,通过使用间隙锁(Gap Lock)和临键锁(Next-Key Lock),在 “可重复读” 隔离级别下就能有效解决幻读问题。

总的来说,不可重复读的重点是内容发生了修改,而幻读重点在于记录的数量上的改变,幻读其实可以看作是不可重复读的一种特殊情况,单独分出来是因为解决幻读和不可重复读的方案不一样

好啦各位小伙伴们,今天的分享就到这里啦,我们下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值