🎃

【SQL入門】ACID特性まとめ

に公開

Atomicity (原子性)

原子性とは、トランザクション内のすべての操作がすべて成功するか、またはすべて失敗するかのどちらかであることを保証する特性です。部分的に成功することはありません。
処理が中断しても中途半端な状態にはなりません。

例: 銀行の振込処理
Aさんの口座からBさんの口座に1万円を送金する場合、「Aさんの口座から1万円を引く」と「Bさんの口座に1万円を足す」という2つの操作が必要です。原子性が保証されていれば、どちらか一方の操作だけが実行されることはなく、両方が成功するか、または両方が実行されないかのどちらかになります。もし途中でシステム障害が発生しても、トランザクションはすべてロールバック(元に戻される)され、データは変更前の状態に戻ります。

Consistency (一貫性)

一貫性とは、トランザクションが完了したときに、データベースが常に整合性の取れた状態にあることを保証する特性です。
データの内容が矛盾した内容になりません。

例: 銀行の振込
取引の前後でAさんとBさんの口座の合計金額は同じでなければなりません。もしAさんの口座から1万円が引かれたのに、Bさんの口座に1万円が追加されなければ、データは一貫性を失います。一貫性は、データベースに設定された制約(例: 主キー、外部キー、チェック制約など)によって維持されます。

Isolation (独立性)

独立性とは、複数のトランザクションが同時に実行されても、それぞれが互いに影響を与えないことを保証する特性です。あたかもトランザクションが一つずつ順番に実行されているかのように見えます。
複数の処理を同時実行しても副作用がありません。

例: AさんとBさんが同時に同じ口座の残高を照会
Aさんが残高を読み取っている間に、Bさんがその口座に金額を追加するトランザクションを実行しても、Aさんが読み取る残高はBさんのトランザクションによる変更前の値になります。
これにより、不正確なデータを読み取ることが防がれます。

Durability (永続性)

永続性とは、コミット(確定)されたトランザクションの変更が、システム障害が発生しても失われることなく永続的に保存されることを保証する特性です。記録した情報は消滅せず保持され続けます。

例: 銀行の振込が完了(コミット)
その直後にサーバーがクラッシュしても、データベースはジャーナルやログファイルを使って、確定した変更を復元します。これにより、データが失われる心配はありません。

参考図書

『スッキリわかるSQL入門 第2版』

Discussion