前回
6. データの更新
6.4 トランザクションとは何か
データベースに対する1つ以上の更新の総称をトランザクションという。
6.4.1 トランザクションの作成
データ操作言語(SELECT, UPDATE, INSERTなど)をDML文というが、これを用いて以下のようにしてトランザクションを生成する:
-- (トランザクション開始文) -- -- DML文① -- DML文② -- DML文③ -- -- (トランザクション終了文) -- SQL Serverを想定 BEGIN TRANSACTION UPDATE (テーブル名1) SET (列名1) = (値1) WHERE (条件1) UPDATE (テーブル名2) SET (列名2) = (値2) WHERE (条件2) COMMIT
トランザクション開始文はRDBMSによって書くべき文言が異なる*1:
SQL Server/PostgreSQL | ||
MySQL | ||
Oracle, DB2 | (無し) |
RDBMS一般にトランザクションの区切りは以下の2つのいずれかがあり得る:
1つの文を1つのトランザクションと見なす(自動コミットモード)。 | |
ユーザがまたはを実行するまでを1つのトランザクションと見なす。 |
一般的なDBMSではいずれも選択可能である。SQL Server, Postgre SQL, MySQLなどでは前者が既定になっている。これに対してOracleでは後者をデフォルトにしいているため、ユーザが自分でコミットまたはロールバックを発行するまでトランザクションが終わらない。
終了文には2種類ある(後述)。
6.4.2 COMMIT
はトランザクションに含まれていた処理による変更をすべて反映してトランザクションを完了させるコマンドである。ひとたびするとトランザクション開始前に戻せない点に注意しなければならない。
6.4.4 ACID特性
(1) | 原子性(Atomicity) | トランザクションが終わった時にそこに含まれていた更新処理がすべて実行されるか、すべて実行されずに終わる((たとえば2つのDMLを含んだトランザクションを実行したときに無作為に選ばれた一方しか実行しない、といった事態が発生しないことを意味する。)。) | |
(2) | 一貫性(Consistency) | トランザクションに含まれる処理がデータベースに予め設定された制約(主キー制約や 制約)を満たす。 | |
(3) | 独立性(Isolation) | トランザクション同士は互いに干渉を受けない。 | |
(4) | 永続性(Durability) | トランザクション終了後にその時点でのデータ状態が保存される。 |