データベーススペシャリスト暗記無料で始める

遅延制約とは?ちえんせいやく

遅延制約とは、制約の検査をSQL文の実行ごとではなく、トランザクションのコミット時点まで先送りする指定。途中の状態が一時的に制約を破っても、最終状態さえ正しければ通る。DEFERRABLEとして定義した制約に対し、SET CONSTRAINTS で DEFERRED に切り替えて使う。

最終更新:2026-10-06

試験情報

データベーススペシャリスト試験の過去問では1回出題されています。

データベーススペシャリスト試験の頻出用語/午前II

別名:DEFERRABLE、DEFERRED、制約検査の遅延

この語が出る過去問を解く →

背景

文単位で検査すると、どう順序を工夫しても通せない更新がある。互いを外部キーで参照し合う2つの表は、どちらを先に挿入しても相手がまだ存在しない。一意な2行の値の入れ替えも、途中で必ず重複が生じる。整合性を「各文の後」ではなく「トランザクションの終わり」で見る、という緩め方でこれを解いている。

具体例

座席番号を入れ替える2本のUPDATEは、途中で同じ番号が2行に並ぶため一意制約に触れる。PostgreSQLで制約を DEFERRABLE INITIALLY DEFERRED としておけば、コミット時点の最終状態だけが検査され、入れ替えが通る。

試験での引っ掛け

遅延できるのはDEFERRABLE指定で定義された制約だけで、NOT DEFERRABLEの制約は必ず文単位で検査される。遅延するとエラーの発生箇所がコミット時になるため、どのSQLが原因だったかを追いにくくなる副作用もある。

関連用語

出た過去問

解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。

この語が出る過去問を解く →

試験での特徴
  • 試験では1回出題
  • 分野:午前II
  • 遅延できるのはDEFERRABLE指定で定義された制約だけで、NOT DEFERRABLEの制約は必ず文単位で検査される。