10:00 読む 10:05 保存 佐藤 数量 3 を見る 住所を変更 → 保存 鈴木 数量 3 を見る 数量を 5 に → 保存(住所の変更が消える)
UPDATE orders
   SET quantity = 5, version = version + 1
 WHERE id = 42 AND version = 7;
-- 更新件数が 0 件 = 読んだ後に誰かが書いた
  1. 編集画面 PUT /orders/42 version: 7
  2. Order API UPDATE … WHERE version = 7
  3. 1 件更新200 OK version: 8 0 件更新409 Conflict
楽観的ロック 悲観的ロック
衝突の扱い 保存時に検出して断る 読むときに行をロックして防ぐ
向いている 衝突がまれ・編集に時間がかかる 衝突が多い・処理が短い
コスト 衝突時にやり直しが要る 待ちとデッドロック