助け合いフォーラム

OSS-DB

OSS-DB Silver(Ver2.0)
問題ID : 12283
問題を開く
「member_info」「group_info」テーブルは以下のように定義されている。 CREATE TABLE group_info (group_id INTEGER PRIMARY KEY, group_name VARCHAR); CREATE TABLE member_info (id INTEGER PRIMARY KEY, name VARCHAR, group_id I...

この問題はプレミアムコンテンツです。

上に戻る

外部キー制約で参照されているカラムをUPDATEできるのは、なぜ?

公開日 2022/04/21

【わからないこと】
回答の内、「UPDATE group_info SET group_id = 4 WHERE group_id = 2;」がなぜ正解になるのかわかりません。

【わからない理由】
「group_infoのカラムの値(group_id = 2)」を変更してしまったら、
「その値を外部キー制約で参照しているmember_infoテーブルのカラム(group_id = 2)」が成り立たなくなると思うからです。

【詳細】
group_infoテーブルのgroup_idカラムは
member_infoテーブルのgroup_idカラムから外部キーとして参照されています。
member_infoテーブルのgroup_idカラムに値(2)が存在しています。

上記のUPDATE文を実行すると、
group_infoテーブルのgroup_idカラムの値(2)が(4)へと変更されます。
すると、member_infoテーブルの(group_id = 2)の参照元が無くなり
外部キー制約が成り立たなくなると思うのですが、
回答の「UPDATE group_info SET group_id = 4 WHERE group_id = 2;」を実行しても
エラーにならないのは、なぜなのでしょうか。

2022/04/22 10:03

member_infoテーブルのgroup_idカラムに値(2)が存在しています。

member_infoテーブルのgroup_idカラムに2を挿入するINSERT文は実行されてないようですけど、ひょっとしてidカラムの2と間違えてないですか?

INSERT INTO member_info VALUES (2, '島田', 3);

参照元に存在しない値であれば、外部キーの参照先はUPDATEできるはずです。


コメント

m miho33

2022/04/22 12:45

回答ありがとうございます。 まさに、ご指摘のとおりidカラムと間違えておりました。 member_infoテーブルのカラムの位置と、カラム名にidが含まれることに意識を引っ張られていました。 スッキリです。ありがとうございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?