トランザクション前後でデータベースの整合性が保たれる性質。
一貫性(Consistency)とは、トランザクションの実行前後で、データベースが整合性(決められたルール)を満たした正しい状態に保たれる性質です。トランザクション=「いくつかの操作をまとめた1つの処理単位」のことです。
ポイントは「途中」ではなく「前後」を見ていることです。処理の途中で一時的に値が崩れることがあっても、処理が終わった時点では必ずルールを満たした状態に戻っていることを保証します。
身近な例で考えると、友達同士の割り勘のようなものです。誰がいくら払うか組み替えても、合計金額は変わってはいけません。上の図解のように、口座Aから口座Bへ振り込んでも「合計500」というルールは保たれる──これが一貫性です。
一貫性でいう「正しい状態」とは、データベースに設定された整合性制約(データが守るべきルール)を満たしている状態のことです。代表的な制約には次のものがあります。
・一意性制約:主キーなどの値が重複してはいけない
・参照整合性制約:存在しない値を参照してはいけない(例: 存在しない部署IDを社員に設定できない)
・検査制約(CHECK):値が決められた範囲を守る(例: 在庫数はマイナスにできない)
・NOT NULL制約:必須項目を空にできない
トランザクションが終わった結果これらの制約を1つでも破ってしまう場合、DBMSはその処理を受け付けず(コミットさせず)、元の正しい状態に戻します。これにより、データベースは常にルールを満たした状態に保たれます。
上の図解の下段が、制約に違反した「許されない例」です。口座Aから引いたのに口座Bへ足し忘れて合計が500から400に減ってしまうと、整合性のルールに反するため、この状態はデータベースに残されません。
一貫性は、ACIDの他の3特性(原子性・独立性・永続性)と密接に関係しています。一貫性は「正しい状態を保つ」という目標であり、それを実現する手段が他の3つだと考えると分かりやすいです。
| 特性 | 一貫性への貢献 |
|---|---|
| 原子性(A) | 中途半端な処理を残さないので、半分だけ反映された不整合を防ぐ |
| 独立性(I) | 同時実行する処理同士を干渉させないので、混ざり合った不整合を防ぐ |
| 永続性(D) | 一度正しくした状態を障害後も維持するので、整合性が消えない |
つまり、原子性・独立性・永続性がそろって支えることで、一貫性が成り立つのです。一貫性だけが単独で実現できるわけではなく、4つの特性が連携して初めて「いつ見てもルールを守った正しいデータベース」になります。