ACIDとは何か
メニューを表示するにはスワイプしてください
リレーショナルデータベースを扱う際、ACID特性の重要性についてよく耳にします。ACIDはAtomicity(原子性)、Consistency(一貫性)、Isolation(分離性)、**Durability(耐久性)**の頭文字を取ったものです。これら4つの原則は、信頼性の高いトランザクション処理の基盤となります。それぞれの特性は重要な役割を担っています。
- Atomicity(原子性):すべてのトランザクションが単一の不可分な単位として扱われることを保証します。トランザクション内のすべての操作が成功するか、すべて失敗するかのいずれかです。
- Consistency(一貫性):トランザクションがデータベースをある有効な状態から別の有効な状態へと移行させ、すべてのルールや制約、データ整合性を維持することを保証します。
- Isolation(分離性):同時実行されるトランザクション同士が互いに干渉しないことを意味します。各トランザクションは、システム上で唯一実行されているかのように動作します。
- Durability(耐久性):トランザクションがコミットされた後、その変更がシステム障害時でも永続的に保存されることを保証します。
これらの特性がなければ、データベースはエラーやデータ損失、予測不能な結果に陥りやすくなります。特に複数ユーザーの利用やシステム障害時には重要です。
12345678910111213141516171819-- Begin a transaction for transferring $200 from Alice (account_id = 1) to Bob (account_id = 2) BEGIN; UPDATE bank_accounts SET balance = balance - 200.00 WHERE account_id = 1; UPDATE bank_accounts SET balance = balance + 200.00 WHERE account_id = 2; INSERT INTO transfers (from_account, to_account, amount) VALUES (1, 2, 200.00); -- Commit the transaction to make changes permanent COMMIT; -- View resulting balances of all accounts SELECT account_id, owner_name, balance FROM bank_accounts;
上記のトランザクションコードを詳しく見て、ACID特性が実際にどのように機能するかを確認します。まずトランザクションを開始し、アリスの口座から200ドルを引き、ボブの口座に200ドルを加算し、振替記録を追加します。トランザクションはCOMMITで確定されます。
- Atomicity(原子性):どのステップかで失敗した場合(例:アリスの残高不足など)、トランザクション全体がロールバックされます。金額は引き落とされず、振替も記録されません。この「すべてかゼロか」の動作が原子性の本質です。
- Consistency(一貫性):トランザクションは、残高がマイナスにならない、合計が正しいなどのビジネスルールを強制します。ルール違反が発生した場合、トランザクションは失敗し、データベースは有効な状態のまま保たれます。
- Isolation(分離性):他のユーザーがこの振替処理中にアリスやボブの残高を読み取ったり更新しようとしても、部分的な更新は見えません。各トランザクションは、唯一データを操作しているかのように動作します。
- Durability(耐久性):
COMMITが発行されると、変更内容はディスクに保存されます。たとえその直後にデータベースサーバーがクラッシュしても、振替記録や更新された残高はシステム再起動後も保持されます。
これらの特性が連携することで、データはソフトウェアエラーやハードウェア障害からも正確かつ信頼性を持って保護されます。
1. トランザクションが「すべてか無か」を保証するACID特性はどれですか?
2. データベーストランザクションにおいて耐久性が重要な理由は何ですか?
3. 同時トランザクションでダーティリードを防ぐ特性はどれですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 1
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 1