非可重复读取与脏读取之间的区别
2022-09-01 14:12:24
从这个预言机java教程:
当事务 A 检索行,事务 B 随后更新该行,事务 A 稍后再次检索同一行时,将发生非可重复读取。事务 A 检索同一行两次,但看到不同的数据。
脏读和非可重复读有什么区别?这不是一回事吗?由于其他人的更新而阅读错误的结果?
提前致谢。
从这个预言机java教程:
当事务 A 检索行,事务 B 随后更新该行,事务 A 稍后再次检索同一行时,将发生非可重复读取。事务 A 检索同一行两次,但看到不同的数据。
脏读和非可重复读有什么区别?这不是一回事吗?由于其他人的更新而阅读错误的结果?
提前致谢。
完全相同的页面解释了什么是脏读:
访问尚未提交的更新值被视为脏读,因为该值可能会回滚到其以前的值。如果读取的值稍后回滚,则将读取无效值。
因此,非可重复读取包括读取两个不同的已提交值,而脏读取包含读取尚未提交的值。完全不同。
从这里:-
当一个事务读取另一个未提交的事务写入的数据时,会发生脏读取。脏读取的危险在于,其他事务可能永远不会提交,从而使原始事务保留“脏”数据。
当一个事务尝试访问相同的数据两次,而第二个事务在第一个事务的读取尝试之间修改数据时,将发生非可重复读取。这可能会导致第一个事务为同一数据读取两个不同的值,从而导致原始读取不可重复。