TCL【Transaction Control Language】トランザクション制御言語
概要

複数の更新処理をまとめて扱う仕組みを「トランザクション処理」(transaction processing)と呼ぶ。例えば、銀行口座間の送金では、出金側の減額と入金側の増額を別々に確定すると、処理中のトラブルで片方だけが実行済み状態になる可能性がある。そのため関連する処理を一つの単位として扱う必要がある。
TCLの代表的な文がCOMMIT文とROLLBACK文である。COMMITは行った変更を確定してデータベースに永続的に反映し、他の利用者からも参照できる状態にする。ROLLBACKは変更を取り消し、トランザクションを開始する前の状態に一括で復元する命令である。
SAVEPOINT文を使うと、トランザクションの途中に保存点を設定できる。特定の保存点までROLLBACKすることで、トランザクション全体を破棄せずに一部の処理だけを取り消して続行できる。複数の更新を含む長いトランザクションで問題が生じた場合に用いられる。このほか、トランザクションの分離レベルなどを設定するSET TRANSACTION文もTCLに含まれる。
SQLの命令は、テーブル構造を定義する「DDL」(Data Definition Language)やデータ操作を行う「DML」(Data Manipulation Language)、権限やトランザクションの制御を行う「DCL」(Data Control Language)といった分類で整理されることが多い。TCLをこうした分類の一つとして独立させる考え方がある一方、DCLの一部として扱い、独立したカテゴリを設けない考え方もある。
トランザクションの開始方法や自動的に確定するオートコミットの設定、DDL文実行時の確定処理は、データベース製品によって仕様が異なる。Oracle DatabaseではDDL文の実行に伴って暗黙のCOMMITが発生する一方、PostgreSQLではBEGINまたはSTART TRANSACTIONでトランザクションを明示的に開始できるなど、製品ごとに扱いが定められている。近年広まっているNoSQLシステムや分散データベースでも、データの整合性を保つための仕組みとしてトランザクション制御の考え方が形を変えて取り入れられている。