SQLにおける参照制約が存在する場合の削除規則|科目A-1(応用情報技術者) 令和7年 春期午前試験 問27

出典:令和7年春期 午前 問27 分野:データベース / データ操作
SQL文に示す参照制約が存在する"商品"表と"受注"表とがある。"商品"表の行を削除したとき,削除した行の商品コードと同じ値の商品コードをもつ"受注"表の行を自動的に削除するSQL文として,aに入れる字句はどれか。 〔SQL文〕 SQL
  • ア:CASCADE
  • イ:RESTRICT
  • ウ:SET DEFAULT
  • エ:SET NULL
応用情報技術者
解説

参照制約は、テーブル同士の関係が壊れないようにするためのルールです。

たとえば、「受注明細テーブル」が「商品テーブルの商品ID」を参照している場合、商品テーブルの商品IDを勝手に削除すると、受注明細側に「存在しない商品ID」が残ってしまいます。これを防ぐために、外部キー制約で削除時・更新時の動作を決めておきます。

指定 動作 イメージ
CASCADE 参照先が更新・削除されると、参照している側も連動して更新・削除される 親データを消すと、関連する子データも一緒に消える
RESTRICT 参照制約に違反する更新・削除を拒否する 子データから参照されている親データは消せない
NO ACTION 処理の終了時に参照整合性を確認し、違反していれば更新・削除を拒否する 最終的に矛盾が残る操作は認めない
SET NULL 参照先が更新・削除されると、参照している外部キーにNULLを設定する 参照先がなくなったら、外部キーを空にする
SET DEFAULT 参照先が更新・削除されると、参照している外部キーにデフォルト値を設定する 参照先がなくなったら、あらかじめ決めた値に戻す

CASCADEは「連動して処理する」、RESTRICTは「矛盾が起きる操作をすぐ拒否する」、NO ACTIONは「処理の終了時に確認して、矛盾があれば拒否する」と整理できます。

SET NULLとSET DEFAULTは、参照先がなくなったときに、外部キーをNULLやデフォルト値に置き換える方法です。

つまり、ON DELETEやON UPDATEは、「参照先のデータが削除・更新されたとき、関連するデータをどう扱うか」を決める設定です。

商品表の行を削除したとき、その商品コードを参照している受注表の行も自動的に削除したい場合は、参照動作としてON DELETE CASCADEを指定します。

CASCADEには「連鎖させる」という意味があり、親表である商品表の行を削除すると、対応する子表である受注表の行にも削除を連鎖させます。

SQL文は、次のようになります。

ON DELETE CASCADE

したがって、が適切です。

❌他選択肢が誤りの理由
イ:RESTRICT
⇒RESTRICTは、参照している受注表の行が存在する場合に、商品表の行の削除を拒否します。受注表の行を自動削除する指定ではありません。
ウ:SET DEFAULT
⇒SET DEFAULTは、商品表の行を削除したとき、受注表の商品コードをあらかじめ設定されたデフォルト値に変更します。受注表の行自体は削除されません。
エ:SET NULL
⇒SET NULLは、商品表の行を削除したとき、受注表の商品コードをNULLに変更します。受注表の行自体は削除されません。
TSUNAGARU-ADVICE

まず押さえたいこと

親表である「商品」表の行を削除したとき、同じ商品コードをもつ「受注」表の行も自動的に削除したい場合は、ON DELETE CASCADEを指定します。CASCADEは、親表の削除を子表へ連鎖させる動作です。

迷ったときの判断軸

RESTRICTは参照中の行があると親表の削除を禁止します。SET NULLは外部キーをNULLにし、SET DEFAULTは既定値へ変更します。「関連する子表の行も削除する」という条件からCASCADEを判断しましょう。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(データ・AI)試験合格を目指す方は、外部キーの削除時動作として、CASCADE・RESTRICT・SET NULL・SET DEFAULTの違いを整理しておくと有効です。参照整合性やデータ削除設計の問題につながります。