01 / 12
振込は 2つの UPDATE
A さんから B さんへ 1万円を振り込む。SQL で書くと、やることは2つだよ。
- A の残高から 10000 を引く
- B の残高に 10000 を足す
ここで、1つ目が終わった直後にサーバが落ちたらどうなるだろう。A の残高は減ったまま、B の残高は増えていない。1万円が世界から消える。
1つ1つの UPDATE はどれも正しく動いている。それでも、途中で止まった状態がそのまま残ってしまうのが問題なんだ。
だから「この2つはセットで、途中の状態を外に見せない」と宣言できる仕組みが要る。それが トランザクション だよ。
振込 = 2つの更新A から 10000 引くB へ 10000 足す片方だけ成功 → 1万円が消滅