【SQL基礎】ACID特性
本項では、ACID特性について説明していきます。
ACID特性とは
ACID特性とは、トランザクションが持つべきとされている4つの性質のことで
それぞれ、原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、永続性(Durability)のことをいいます。
ただし、これらを実現するには、RDBMS側だけでなくそれを扱うアプリケーション側も1つのトランザクションで実行すべき処理を別々のトランザクションに分割して実行しないなど適切に設計されている必要があります。
原子性(Atomicity)
トランザクションの最初の説明で使用した銀行の口座振込処理の例で述べたように、
トランザクション中の全ての処理が実行されている状態(コミット)、または、全ての処理が実行されていない状態(ロールバック)になることを保証する性質のことをいいます。
一貫性(Consistency)
トランザクション処理の前後で、データの整合性が保証される性質のことをいいます。
トランザクション中のそれぞれの処理は、あらかじめ定められたルールに乗っ取って処理され、それに反するような処理があれば、トランザクションを中断しロールバックするように制御します。
これを実現するためには、データベース側で正しく型や制約を設定し、それだけでは不足する部分はアプリケーション側できちんとチェックする処理を実装している必要があります。
例えば、コミットとロールバックの説明で使ったようなテストの点数を登録するテーブルでは、実施したテストの最小の点数が0点である場合、あり得ない値であるマイナスの点数は登録できないようにします。
独立性(Isolation)
コミットの説明のところで述べたように、トランザクション中のコミットされる前の仮の状態のデータは、外部からは見ることができないという性質になります。
具体的には、トランザクションが処理途中のときは、外部からはトランザクション開始前の状態で見え、コミットされて初めて処理後の状態が確認できるようになります。
永続性(Durability)
コミットされ記録されたデータが停電などの何らかの障害が起きようとも永続的に失われることがないようにする性質のことをいいます。
多くの場合、トランザクション操作のログを取っておき、そのログを利用して障害発生前の状態に復旧できるようにしています。
MySQLの場合、バイナリログ等がそれに該当します。
今回の学習ポイント
・トランザクションはACIDという4つの性質を持つことでその信頼性を保証している。
練習問題
1.以下はそれぞれ原子性、一貫性、独立性、永続性のどれを説明しているか答えなさい。
A)トランザクションは他のトランザクションに影響を与えない
B)トランザクションの処理はすべて実行されるか、されないかの2つの状態しかない
C)トランザクションはルールに反する処理が実行されないように制御される
D)トランザクションは一度コミットしたデータは失われることはない