トランザクション

トランザクションは、一連の処理をひとつのまとまりとして扱い、全部成功するか全部なかったことにするかを保証する仕組みです。

トランザクション のアイキャッチ図解
まずは、こう考えるとつかみやすいです。

トランザクションは、銀行の振込操作に似ています。「引き落とし」と「入金」がセットで成立するか、どちらも行われないかのどちらかです。片方だけ起きることは許されません。

ひとことで言うと

トランザクションは、複数の処理をひとつのまとまりとして扱い、すべて成功(コミット)するか、すべて元に戻す(ロールバック)かのどちらかを保証する仕組みです。

「途中までしか処理されない」という状態を防ぐことで、データの一貫性を守ります。 データベースの操作で欠かせない概念で、基本情報技術者試験でも必ずといっていいほど出題されます。

たとえ話でもう少し詳しく

トランザクションは、銀行の振込に近いです。

  • Aさんの口座から1万円を引き落とす
  • Bさんの口座に1万円を入金する

この2つはセットです。 引き落としだけ起きてBさんへの入金が失敗したら、1万円がどこにも存在しなくなります。 逆にAさんからの引き落とし前にBさんへの入金が確定したら、お金が増えてしまいます。

トランザクションは「2つとも成功したら確定、1つでも失敗したら両方なかったことにする」を保証します。

ACID特性

トランザクションには4つの性質(ACID)が定義されています。

性質意味
Atomicity(原子性)すべて完了するかすべて取り消されるかのどちらか
Consistency(一貫性)処理の前後でデータが整合した状態を保つ
Isolation(独立性)同時に複数の処理が走っても互いに干渉しない
Durability(永続性)完了した処理の結果は、障害が起きても消えない

基本情報ではこの4つの頭文字「ACID」がよく問われます。

よく出る場面・使いどころ

  • ECサイトの注文処理(在庫を減らして・注文を記録して・決済を確定する)
  • 銀行・送金サービスでの入出金
  • 予約システムで「空席確認」と「席の確保」を同時に行うとき
  • 複数テーブルにまたがるデータ更新を一括で扱うとき

似た言葉との違い

  • マイグレーション
    • データベースの構造変更を管理する仕組み
    • マイグレーションもトランザクション的に「適用するか戻すか」を管理する
  • バックアップ
    • データを別の場所に保存しておく仕組み
    • トランザクションが失敗しても自動でロールバックされるが、障害でデータが壊れた場合の復旧はバックアップが必要
  • ロールバック
    • 変更を元の状態に戻す作業
    • トランザクションにおいては処理失敗時に自動的に行われる

実務で気にするポイント

  • トランザクションの範囲を広げすぎると、ロックがかかって他の処理が待たされる
  • 長時間のトランザクションはデータベースの性能問題の原因になりやすい
  • 「どこまでをひとつのトランザクションにするか」の設計はシステムの信頼性を左右する
  • エラー時のロールバック処理をアプリ側でも明示的に書く習慣を持つ

注意: トランザクションを使えば万全というわけではありません。トランザクション範囲の設計が不適切だと、デッドロック(複数の処理が互いに相手の完了を待ち続ける状態)が発生することがあります。