ロストアップデート
Lost Update
Dead Step
古い値を元に上書きされてしまうという問題。
読み取りの順序は前後する可能性がある。
code:mermaid
sequenceDiagram
participant T1 as トランザクション1
participant DB as データベース
participant T2 as トランザクション2
T1->>DB: BEGIN TRANSACTION
T1->>DB: SELECT balance FROM account WHERE id = 1
Note over T1: 残高 1000 を読み取る
T2->>DB: BEGIN TRANSACTION
T2->>DB: SELECT balance FROM account WHERE id = 1
Note over T2: 残高 1000 を読み取る
T2->>DB: UPDATE account SET balance = balance + 200 WHERE id = 1
Note over T2: 残高を 1200 に更新
T2->>DB: COMMIT
T1->>DB: UPDATE account SET balance = balance - 100 WHERE id = 1
Note over T1: 古い値に基づいて更新(900になる)
T1->>DB: COMMIT
Note over DB: 最終残高が 900 になり、T2の更新が失われる