一貫性
メニューを表示するにはスワイプしてください
一貫性はSQLデータベースにおける基本的な特性であり、すべてのトランザクションがデータベースをある有効な状態から別の有効な状態へ移行させることを保証します。つまり、すべてのデータは常にデータベースに定義されたルールや制約を満たしていなければなりません。制約とは、有効なデータを強制するためにテーブルやカラムに設定するルールです。一般的な制約には、NOT NULL(カラムに欠損値が入らないことを保証)、CHECK(値が特定の条件を満たすことを強制)、FOREIGN KEY(テーブル間のリレーションシップを維持)などがあります。bank_accountsテーブルの文脈では、制約によってすべての口座が常に有効な所有者名と有効な残高を持つことが保証されます。例えば、NOT NULLとowner_nameに対するbalance制約は、所有者や残高の値がない口座が存在しないことを保証します。データベースが負の残高を許可すると、ビジネスルールで認められていない場合に口座が借金を抱えるなどの無効な状態につながる可能性があります。
12345678910-- Drop the CHECK constraint if it already exists to avoid errors ALTER TABLE bank_accounts DROP CONSTRAINT IF EXISTS balance_nonnegative; -- Add a CHECK constraint to ensure balances are never negative ALTER TABLE bank_accounts ADD CONSTRAINT balance_nonnegative CHECK (balance >= 0); -- Show current balances in the bank_accounts table SELECT account_id, owner_name, balance FROM bank_accounts;
上記で追加されたCHECK制約は、balanceテーブルのbank_accountsがゼロ未満にならないことを強制します。負の残高で行を挿入または更新しようとすると、データベースはその操作を拒否し、エラーを返します。これにより、ビジネスルールに違反する偶発的または悪意のある変更を防ぎ、データベースが一貫した状態に保たれます。トランザクションが口座の残高を負の値に設定しようとした場合、違反が発生した時点でトランザクションは失敗し、コミットされず、データの有効性が維持されます。
1. 一貫性を維持する上での制約の役割は何ですか?
2. トランザクションがCHECK制約に違反した場合、どうなりますか?
3. トランザクションがデータベースを不整合な状態にしたままコミットされることはありますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください