Transaction
失去更新理解
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。