IT-Q

トランザクションを張らずに複数テーブルを更新すると、何が起きますか。

注文を作った直後に在庫の減算で失敗すると、在庫が減っていない注文が残ります。厄介なのは、こうしたデータがエラーログに残らないことです。後から集計が合わない原因になります。

面接官が見ているのは必要性の補強。

これは「トランザクションを張る範囲として妥当なのはどれですか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • 途中で失敗すると片方だけ書き込まれた状態が残り、エラーログにも現れにくい
    その通りです。例外は出ますが、既に書き込まれた行はそのまま残ります。後から集計が合わない原因になり、発見が遅れます。
  • 例外が出た時点で自動的に全部取り消される
    取り消されません。それをするための仕組みがトランザクションです。
  • 処理が遅くなる
    むしろ速いことが多いです。問題は速度ではなく整合性です。
  • DB がエラーを出して更新を拒否する
    個々の更新は正常に成功します。だから気づきにくいのです。

面接官は何を見ているか

  • 途中で失敗した時に片方だけ残る状態を説明できた
  • 具体例を1つ挙げられた
  • その状態が後からどう厄介かに触れた

模範解答

たとえば注文を作った直後に在庫の減算で失敗すると、在庫が減っていない注文が残ります。厄介なのは、こういうデータが「エラーログには残らない」ことです。処理としては例外が出ますが、既に書き込まれた行はそのまま残る。後から集計が合わない原因になり、しかも発見が遅れます。