はじめに
データベースの勉強をしていると、
「ACID特性」や「トランザクション」などという言葉をよく聞きます。
私は何回聞いても何が何なのか覚えられなかったので、
アウトプットして覚えようということで記事を書きます。
(この覚え方はあくまで個人的に考えたものです。)
トランザクションとは
トランザクションは一言でいうと、
複数の利用者が同時にデータベースにアクセスしても矛盾を発生させないための
SQL処理の最小単位
です。
以下は例なので、トランザクションが何者かわかっている方は読み飛ばしてください。
例えば、AさんとBさんがスーパーの商品テーブルにアクセスしています。
以下のように同時にデータベースにアクセスすると、矛盾が発生してしまいます。
- Aさんがりんごを1つ100円で登録する
- Bさんがりんごを1つ120円で登録する
- Aさんがりんご10個の合計の値段を計算し、りんごをテーブルから削除する
- Bさんがりんご10個の合計の値段を計算する
このとき、3でAさんは本来であれば 100*10 = ¥1,000
と出力されてほしいですが、
Bさんがりんごの値段を上書きしてしまっているので
予想とは違う 120*10 = ¥1,200
が出力されてしまいます。
また、4でBさんはりんご10個の合計の値段を計算したいですが、
Aさんによってりんごの情報がデータベースから消されてしまったので、
エラーが発生します。
トランザクションがないとこのように矛盾が生じます。
データベースの矛盾を発生させない仕組みをトランザクション管理といいます。
ACID特性とその覚え方
トランザクション処理は、ACID特性と呼ばれる4つの特性を備えている必要があります。
ACID特性の4つ
- Atomicity 原子性
- Consistency 一貫性
- Isolation 隔離性/独立性
- Durability 耐久性
ACID特性の説明と覚え方
特性 | 一言でいうと | 覚え方 |
---|---|---|
原子性 | 処理が全て完了しているか、全く実行されていないかのどちらかである | 原子はあるかないかのどちらかなので、白黒はっきりさせるのが原子性。 |
一貫性 | データに矛盾が生じない | 矛盾がないので一貫性 |
隔離性 | 複数のトランザクションを同時または並行のどちらで実行しても結果が一致する | 処理の順番に依存しないので隔離性 |
耐久性 | 正常終了した後、障害が発生しても結果が消失しない | 障害があっても結果を保持するので耐久性 |
視覚的にまとめてみると意外とスッキリして覚えられそうな気がします。
ACIDがどの英単語の頭文字なのかを覚えておいて、
あとはそこからこの覚え方を使って導くのが良さそうです。