gpt4 book ai didi

java - 丢失更新与不可重复读取有何不同?

转载 作者:行者123 更新时间:2023-12-01 21:26:33 26 4
gpt4 key购买 nike

我试图了解隔离级别和各种问题......即脏读、不可重复读、幻读和丢失更新。正在阅读 Non repeatable read

还阅读过 Lost update

令我困惑的是,对我来说,这两个看起来非常相似,即在 NRR(不可重复读取)中,Tx B 更新了 Tx A 对同一行的两次读取之间的行,因此 Tx A 得到了不同的结果。

如果发生更新丢失 - Tx B 会覆盖 Tx A 提交的更改所以对我来说,这两者似乎非常相似且相关。这是正确的吗?

我的理解是,如果我们使用“乐观锁定”,它将防止“丢失更新”的问题(基于一些非常好的答案 here )

我的困惑:然而,这是否也意味着通过使用“乐观锁定”,我们也消除了“不可重复读取”的问题?所有这些问题都与使用 Oracle 数据库的 Java J2EE 应用程序有关。

注意:为了避免分心,我不会寻找有关脏读和幻读的详细信息 - 我目前的重点完全是不可重复读和丢失更新

最佳答案

不可重复读、丢失更新、幻读以及脏读都与事务有关 isolation levels ,而不是悲观/乐观锁定。我相信Oracle的默认隔离级别是已提交读,这意味着仅防止脏读。

不可重复读取和丢失更新确实在某种程度上相关,因为它们可能会也可能不会发生在同一隔离级别上。除非您设置正确的隔离级别,否则这两种情况都不能通过锁定来避免,但您可以使用版本控制(每次更新时都会检查并递增的列值)来至少检测问题(并采取必要的措施)。

关于java - 丢失更新与不可重复读取有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58828807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com