Learn VisualLearn DB Visual
EN

同じ古い値から2回計算しない

残高100の行を2つの処理が同時に読み、それぞれ10と20を引いて別々に書き込むと、片方の更新が失われます。SELECT FOR UPDATEは先に行を確保し、後続処理を待たせます。待った処理は、先の変更が確定してから新しい値(90)を読んで計算するため、両方の変更が反映されます。

残高100から10と20をそれぞれ引く処理が両方反映されたとき、正しい残高は?