SQL設計・ウィンドウ関数・関係代数 重要度:★★★出題: AM2・PM1・PM2
参照制約(FOREIGN KEY)と削除・更新オプション(RESTRICT / CASCADE / SET NULL)
さんしょうせいやくとさくじょこうしんおぷしょん / Referential Integrity Actions (RESTRICT, CASCADE, SET NULL)
被参照テーブル(親)の主キー行が削除・更新された際に、参照テーブル(子)の外部キー行をどのように扱うかを規定するDDL整合性オプション。
3行速習ポイント
- RESTRICT(またはNO ACTION):子テーブルに参照している行が1件でも存在する場合、親テーブルの行の削除・更新を拒否(エラー)する
- CASCADE:親テーブルの行が削除・更新されたとき、それを参照している子テーブルの行も連動して自動的に削除・更新する
- SET NULL:親テーブルの行が削除・更新されたとき、子テーブルの外部キー列の値をNULLに変更する(ただし外部キー列がNOT NULLまたは主キーの一部の場合は設定不可)
図解
図参照制約(ON DELETE / ON UPDATE)の3大オプション
削除・更新拒否
RESTRICT / NO ACTION
子テーブルに参照行が1件でも存在する場合、親行の削除・更新をエラーとして拒否
連動削除・更新
CASCADE(連鎖)
親行の削除・更新に連動して、参照している子テーブルの行も自動的に削除・更新
NULL置換
SET NULL
親行の削除・更新時に子テーブルの外部キー列をNULLへ変更(主キー構成列には適用不可)
概要と本質
午後Iの物理設計・SQL設問(例:令和6年午後I問3など)で非常に狙われやすいテーマです。また自己参照テーブル(組織の上位組織コードなど)や相互参照テーブル(組織の組織長従業員コードと従業員の所属組織コード)に参照制約を定義する際のデータ投入順序・ALTER TABLE手順も頻出です。
重要ポイント・コア概念
- 相互参照(循環参照)テーブルへの初期データ登録:一方の外部キーを一旦NULLでINSERTし、もう一方をINSERTした後にUPDATEするか、後からALTER TABLEで外部キー制約を追加する
- 自己参照テーブルへの初期データ登録:最上位階層(親がNULLのルート行)から下位階層へ向かって順番にINSERTする
- 子テーブル側で外部キーが「主キーの一部」になっている場合、主キーはNULLをとれないため ON DELETE SET NULL は指定できない
午後I・午後II記述試験での攻略ポイント
午後Iで「なぜON DELETE SET NULL(またはRESTRICT)を指定するとエラーになるのか」と問われたら、『参照側テーブルの当該列は主キーの一部でありNULLに変更できないから』『参照側テーブルに同じコードをもつ行が存在する場合があるから』と、主キー制約(非NULL)と子レコードの存在に着目して答えます。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着データベーススペシャリスト 過去問演習で実践力を鍛える