トランザクション - notee/MySQL GitHub Wiki

トランザクションとは

一つもしくは複数の処理からなるデータ処理の流れのひとまとまりのこと。MySQLでは順序を持った一つ以上のクエリの集合で表される。

信頼性のあるトランザクションシステムは以下のACID特性を持つべきである、とされる。

ACID特性

原子性・不可分性 / Atomicity

トランザクションに含まれる処理を一連のまとまりとして扱い、不可分とする性質。MySQLではトランザクション処理がすべて成功の時に処理結果をデータに反映し、一つでも処理が失敗したらすべての処理をなかったことにする、実行しない、という方法で実装されている。

一貫性 / Consistency

トランザクション処理の前後において、データの整合性をとるという性質。トランザクション処理がデータAをデータBに変える処理だとするのならば、どんな状況でもこのルールをそのトランザクションが守ること。このルールを守らないトランザクションの実行は中断され、データAの状態に戻すこと。例えば複数テーブルにまたがったトランザクション処理を行なう際に処理間でMySQLが落ちたとしても、トランザクション全体がロールバックされるため片方のテーブルのみ更新された、などという状況は作られない。

独立性 / Isolation

あるトランザクションにおける処理が他の操作から隠蔽される性質。トランザクション中に処理されたデータはそのトランザクションが終わるまで他の操作から観測・処理されないということ。トランザクション分離レベルによってこの性質の強さは変化する。

永続性 / Durability

トランザクション処理が成功したらその処理の結果は永続的に保存されるという性質。コミットされたデータはHDDなどの永続記録装置に保存される。MySQLではバイナリログファイルへ処理を全て書き出しているため、障害時にはここから復旧できる。

トランザクション使用可能なストレージエンジン

MySQLではInnoDB, Falcon, solidDB, PBXTなどでトランザクションの利用が可能。

これに対し、MyISAMなどはトランザクション利用ができず、クエリ毎に処理結果が保存される。