遅延制約とは?ちえんせいやく
遅延制約とは、一貫性制約の検査を、SQL文の実行ごと(IMMEDIATE)ではなくトランザクションのコミット時点まで先送りする指定。DEFERRABLEとして定義した制約にだけ設定でき、処理の途中では制約を満たさない状態を一時的に許す代わりに、コミットの瞬間には満たしていることを求める。
最終更新:2026-10-06
情報処理安全確保支援士を最短で暗記・合格する →背景
互いを参照し合う二つの表への登録や、一意な値どうしの入れ替えのように、どちらの順で書いても途中で必ず制約に触れてしまう操作がある。一文ごとに検査する決まりのままでは、正しい最終状態へ到達する手段が無くなってしまう。そこで検査の時点を選べるようにした。支援士の観点では、検査を緩めている区間が「整合していないデータが存在する時間帯」でもあるため、他のトランザクションからどこまで見えるかという分離の話と併せて考える必要がある。
具体例
PostgreSQLやOracle Databaseでは、制約の定義にDEFERRABLE INITIALLY DEFERREDを付けると検査がコミットまで先送りされる。社員番号の一意制約をこの指定にしておけば、二人の番号を入れ替える二つのUPDATEの途中で値が重複しても、コミット時点で解消していれば処理は通る。
試験での引っ掛け
先送りできるのはDEFERRABLEと定義された制約だけで、既定のNOT DEFERRABLEでは文ごとに必ず検査される。制約そのものを外しているのではなく検査の時点を動かしているだけで、コミット時には同じ厳しさで見られる。違反がコミット時にまとめて出るため、どの文が原因かを追いにくくなる点も実務上の代償になる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。