非可重复读取与脏读取之间的区别

2022-09-01 14:12:24

这个预言机java教程:

当事务 A 检索行,事务 B 随后更新该行,事务 A 稍后再次检索同一行时,将发生非可重复读取。事务 A 检索同一行两次,但看到不同的数据。

脏读和非可重复读有什么区别?这不是一回事吗?由于其他人的更新而阅读错误的结果?

提前致谢。


答案 1

完全相同的页面解释了什么是脏读:

访问尚未提交的更新值被视为脏读,因为该值可能会回滚到其以前的值。如果读取的值稍后回滚,则将读取无效值。

因此,非可重复读取包括读取两个不同的已提交值,而脏读取包含读取尚未提交的值。完全不同。


答案 2

从这里:-

当一个事务读取另一个未提交的事务写入的数据时,会发生脏读取。脏读取的危险在于,其他事务可能永远不会提交,从而使原始事务保留“脏”数据。

当一个事务尝试访问相同的数据两次,而第二个事务在第一个事务的读取尝试之间修改数据时,将发生非可重复读取。这可能会导致第一个事务为同一数据读取两个不同的值,从而导致原始读取不可重复。


推荐