并发控制中丢失的更新?

CGF*_*CGF 2 concurrency

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

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

Jef*_*emp 16

"丢失更新"问题涉及在读取器不阻止写入器的系统中对数据的并发读取和更新.交易不必完全同时进行.

  1. 会话#1读取帐户A,获得100.
  2. 会话#2读取帐户A,获得100.
  3. 会话#2将帐户A更新为150(+50)并提交.
  4. 会话#1将帐户A更新为120(+20)并提交.

在这种情况下,因为会话#1不知道另一个会话已经修改了帐户,所以会话#2的更新被覆盖("丢失").

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