IT-Q

トランザクションはどういう場面で使いますか。

複数テーブルを更新して、片方だけ成功すると不整合になる箇所に使います。注文を作ってから在庫を減らす、が典型です。途中で例外が出れば全部が巻き戻る、という保証を買っています。

面接官が見ているのは整合性という観点を持っているか。

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

  • 複数のテーブルを更新し、途中で失敗すると不整合になる場面
    その通りです。注文の作成と在庫の減算のような組み合わせが典型です。
  • 処理を速くしたい場面
    速度のための仕組みではありません。
  • 同じ処理を何度も実行したい場面
    繰り返し実行とは関係ありません。
  • SELECT で大量のデータを取得する場面
    読み取りだけなら通常は不要です。

模範解答

複数のテーブルを更新して、片方だけ成功すると不整合になる箇所に使います。注文を作ってから在庫を減らす、のような組み合わせが典型です。

  DB::transaction(function () {
      $order = Order::create([...]);
      $stock->decrement('qty');
  });

クロージャ形式なら例外時に自動でロールバックされます。範囲は最小限にします。中に外部API呼び出しを入れると、応答待ちの間ずっとロックを握り続けることになります。