并发控制中丢失的更新?

时间:2009-05-12 22:04:29

标签: concurrency

我有两个事务T和U,它们在DB中同时执行。如何提供丢失更新问题的示例?

我们可以假设我们有三个帐户A,B,C,它们分别有100英镑,200英镑和300英镑。

3 个答案:

答案 0 :(得分:16)

“丢失更新”问题涉及在读取器不阻止编写器的系统中对数据进行并发读取和更新。交易没有必要完全同时进行。

  1. 会话#1读取帐户A,获得100。
  2. 会话#2读取帐户A,获得100。
  3. 会话#2将帐户A更新为150(+50)并提交。
  4. 会话#1将帐户A更新为120(+20)并提交。
  5. 在这种情况下,由于会话#1不知道另一个会话已经修改了帐户,因此会话#2的更新将被覆盖(“丢失”)。

    有几种方法可以解决这个问题,例如:版本号或之前和之后的比较。

答案 1 :(得分:1)

(3)将帐户A更新为150,其中帐户为100 - >账户A现在是150

(4)将帐户A更新为120,其中帐户为100 - >更新失败,因为帐户A是150而不是100

答案 2 :(得分:1)

当访问相同数据库项的两个事务以一种使某个数据库项的值不正确的方式交错其操作时,会发生这种情况。