トランザクションを張らずに複数テーブルを更新すると、何が起きますか。
注文を作った直後に在庫の減算で失敗すると、在庫が減っていない注文が残ります。厄介なのは、こうしたデータがエラーログに残らないことです。後から集計が合わない原因になります。
面接官が見ているのは必要性の補強。
これは「トランザクションを張る範囲として妥当なのはどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- 途中で失敗すると片方だけ書き込まれた状態が残り、エラーログにも現れにくい
その通りです。例外は出ますが、既に書き込まれた行はそのまま残ります。後から集計が合わない原因になり、発見が遅れます。 - 例外が出た時点で自動的に全部取り消される
取り消されません。それをするための仕組みがトランザクションです。 - 処理が遅くなる
むしろ速いことが多いです。問題は速度ではなく整合性です。 - DB がエラーを出して更新を拒否する
個々の更新は正常に成功します。だから気づきにくいのです。
面接官は何を見ているか
- 途中で失敗した時に片方だけ残る状態を説明できた
- 具体例を1つ挙げられた
- その状態が後からどう厄介かに触れた
模範解答
たとえば注文を作った直後に在庫の減算で失敗すると、在庫が減っていない注文が残ります。厄介なのは、こういうデータが「エラーログには残らない」ことです。処理としては例外が出ますが、既に書き込まれた行はそのまま残る。後から集計が合わない原因になり、しかも発見が遅れます。