Transaction

失去更新理解

  • September 25, 2019

https://habr.com/en/company/postgrespro/blog/467437/ 給出了以下失去更新的範例:

例如,兩次交易將使同一賬戶的金額增加 ₽100(₽ 是俄羅斯盧布的貨幣符號)。第一個事務讀取目前值 (₽1000),然後第二個事務讀取相同的值。第一個交易增加了金額(這給出了 ₽1100)並寫入了這個值。第二個事務的行為方式相同:它得到相同的 ₽1100 並寫入該值。結果,客戶損失了₽100

我讀了幾遍。但我不明白客戶是如何失去 P100 的。請解釋。

有兩筆單獨的交易(T1 和 T2),每筆交易都會在客戶的餘額中增加 ₽100。

預期的結果是:

  • T1讀取目前餘額為₽1000,添加₽100,寫入₽1100
  • T2 讀取目前餘額為₽1100,添加 ₽100 並寫入₽1200

或者反過來(T2 然後 T1)。重要的一點是,兩個增量都應用了 ₽100。

在失去更新的範例中,會發生以下情況:

  • T1 讀取目前餘額為₽1000
  • T2 讀取目前餘額為₽1000
  • T2 加上 ₽100(它讀取的 ₽1000),並寫入 ₽1100
  • T1 加上 ₽100(它讀取的 ₽1000),並寫入 ₽1100

這樣最終餘額是₽1100,而不是₽1200,所以客戶損失了₽100。

引用自:https://dba.stackexchange.com/questions/249351