SQLで複数の更新処理をひとまとまりとして扱い、すべて成功したときだけCOMMITで確定する仕組みを何と呼びますか。
1〜4キーで選択、Enterで回答できます
解説
正解は「トランザクション」です。トランザクションは複数のSQL文を分割できない1つの作業単位としてまとめ、すべて成功すれば COMMIT で確定し、途中で失敗すれば ROLLBACK で開始前の状態に戻す仕組みです。基本の流れ典型例は口座間の送金です。片方から引いて片方に足す2つの更新は、どちらか一方だけが反映されると残高が壊れてしまいます。BEGIN; -- ここからひとまとまりの処理が始まります UPDATE accounts SET balance = balance - 1000 WHERE id = 1; UPDATE accounts SET balance = balance + 1000 WHERE id = 2; COMMIT; -- 両方成功したのでまとめて確定します -- 途中で異常があれば COMMIT の代わりに ROLLBACK で全部なかったことにしますこの「全部やるか、全部やらないか」という性質は原子性(Atomicity)と呼ばれ、一貫性・独立性・永続性と合わせてACID特性と総称されます。他の用語との違い「ストアドプロシージャ」はSQLの処理手順をデータベース側に名前付きで保存しておく機能です。中でトランザクションを使うことはありますが、それ自体が確定と取り消しを保証する仕組みではありません。「ビュー」は SELECT 文に名前を付けた仮想的な表で、参照を簡単にするためのものです。「カーソル」は検索結果を1行ずつ順番に取り出すための仕組みで、更新のまとまりとは無関係です。BEGIN を書いていないのに反映される理由多くのデータベースは自動コミット(autocommit)が既定で有効で、明示的に BEGIN を書かない限りSQL文1つごとに即座に確定されます。「あとで ROLLBACK すれば戻せる」と思っていても、自動コミット下では戻せません。またMySQLでは CREATE TABLE や ALTER TABLE などのDDLが暗黙的にコミットを発生させるため、トランザクションの途中にDDLを挟むと、そこまでの更新が意図せず確定してしまう点にも注意が必要です。参考PostgreSQL: TransactionsMySQL: START TRANSACTION、COMMIT、ROLLBACK ステートメント