データベース操作・制御

トランザクション とらんざくしょん

ACID特性コミットロールバック整合性排他制御SQL
トランザクションについて教えて

簡単に言うとこんな感じ!

トランザクションは「ひとまとめにやるか、全部やらないか」の仕組みだよ! 銀行振込で「A口座から引く→B口座に足す」の2ステップは必ず両方成功しないとダメだよね。片方だけ成功したらお金が消えちゃう。それを防ぐのがトランザクションってこと!


トランザクションとは

**トランザクション(Transaction)とは、データベースに対する一連の操作を「ひとかたまりの処理単位」として扱う仕組みです。複数の更新処理をまとめて「全部成功する」か「全部なかったことにする」かのどちらかに確定することで、データの整合性(一貫性)**を保証します。

銀行振込を例にすると、「A口座から10,000円を引く」「B口座に10,000円を足す」という2つの操作は必ずセットで完了しなければなりません。システム障害などで途中で止まってしまったとき、片方だけが反映された状態だとお金が消えてしまいます。トランザクションがあれば、失敗した場合は自動的に「A口座から引く」操作もなかったことになります。

この「全部成功=コミット(Commit)」「全部取り消し=ロールバック(Rollback)」という動作がトランザクションの核心です。ショッピングサイトの注文処理、在庫引き当て、会計仕訳など、「絶対に中途半端で終わってはいけない」あらゆるビジネス処理の土台になっています。


トランザクションの仕組み

状態説明
BEGIN(開始)トランザクション開始を宣言。ここから変更が追跡される
処理中INSERT / UPDATE / DELETE などの操作を実行。まだDBには確定していない
COMMIT(確定)全操作を永続化する。以降は変更が見える状態になる
ROLLBACK(取り消し)BEGIN以降の操作をすべて破棄し、開始前の状態に戻す
BEGIN;

UPDATE accounts SET balance = balance - 10000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 10000 WHERE id = 'B';

-- ここまで問題なければ確定
COMMIT;

-- もし途中でエラーが起きたら取り消し
-- ROLLBACK;

歴史と背景

  • 1960年代:大型汎用機でのバッチ処理が主流で、複数ユーザーが同時アクセスする必要が生まれトランザクション管理の概念が発展
  • 1970年:エドガー・コッドのリレーショナルモデル論文発表。データ整合性の重要性が理論的に整理される
  • 1983年:IBMのジム・グレイらがACID特性を定義。トランザクションが満たすべき条件が明文化された
  • 1990年代:Oracleなどの商用RDBMSがACID準拠を標準装備。エンタープライズシステムへ広く普及
  • 2000年代後半NoSQLの登場でACIDを緩めた「結果整合性(Eventual Consistency)」モデルも注目される
  • 2010年代〜:分散データベース環境での分散トランザクション(2フェーズコミットなど)が課題となり、NewSQLカテゴリが台頭

トランザクションとACID特性

トランザクションが保証する性質はACIDの4文字で表されます。

ACID特性 A 原子性 全部成功か 全部失敗か C 一貫性 整合ルールを 常に守る I 独立性 並行処理でも 互いに干渉しない D 耐久性 コミット後は 消えない Atomicity / Consistency / Isolation / Durability この4性質を満たすことで「安全なデータ操作」が保証される 銀行・医療・在庫管理など「絶対に間違えられない」システムの基盤 NoSQLでは性能優先のため一部を緩める場合もある

関連する規格・RFC

規格内容
ISO/IEC 9075 (SQL標準)BEGIN / COMMIT / ROLLBACK の構文を規定
X/Open XA複数DBにまたがる分散トランザクションの標準インターフェース
2PC(2フェーズコミット)分散トランザクションを確実にコミット/ロールバックするプロトコル

関連用語