SQL文に示す参照制約が存在する“商品”表と“受注”表とがある。
“商品”表の行を削除したとき,削除した行の商品コードと同じ値の商品コードをもつ“受注”表の行を自動的に削除するSQL文として,aに入れる字句はどれか。
〔SQL文〕
CREATE TABLE 商品 (
商品コード CHAR(4) PRIMARY KEY ,
商品名 VARCHAR(64)
)
CREATE TABLE 受注 (
受注番号 INTEGER PRIMARY KEY ,
商品コード CHAR(4) ,
受注個数 INTEGER ,
納品日 CHAR(8) ,
FOREIGN KEY (商品コード) REFERENCES 商品(商品コード)
ON DELETE a
)
正答1
解説
正解は1です。
FOREIGN KEY句で外部キーを定義すると、参照先の行を削除したときの動作をON DELETEで指定できます。
問題では、“商品”表の行を削除したとき、同じ商品コードをもつ“受注”表の行も自動的に削除する動作が求められています。
【選択肢別解説】
1:○ CASCADEは、参照先(親表)の行の削除を、参照している行(子表)にも連鎖させる指定です。
商品を削除すると、その商品コードをもつ受注の行も自動的に削除されます。
2:× RESTRICTは、参照している行が存在する場合、参照先の行の削除を拒否する指定です。
受注がある商品は削除できなくなるので、受注の行が自動的に削除されることはありません。
3:× SET DEFAULTは、参照している行の外部キーの値を、列の既定値(デフォルト値)に置き換える指定です。
受注の行は削除されずに残ります。
4:× SET NULLは、参照している行の外部キーの値をNULLに置き換える指定です。
受注の行は商品コードが空の状態で残り、削除はされません。
【ポイント】
ON DELETEとON UPDATEには、CASCADE、RESTRICT(NO ACTION)、SET NULL、SET DEFAULTを指定できます。
自動削除はCASCADE、削除を拒否するのはRESTRICTと区別して覚えましょう。