• ベストアンサー

CASCADE CONSTRAINTSについて

CASCADE CONSTRAINTSオプション使用時の子表の値について教えてください。 例 子表           親表 NAME NUM     NO  ADRESS ----------      -------------- AAA    10      10   DDD  BBB    20      20   EEE  CCC   NULL 子表のNUM列が、親表のNO列を参照。 DROP TABLE 親表 CASCADE CONSTRAINTS; を実行すると親表が削除されますが、子表はどうなるのでしょうか。 いろいろ調べてみましたが、はっきりしません。 1.制約だけが削除されて、値は変わらない。 2.参照していた行が削除される。NULLの行は残る? 3.参照していた列が削除される。 4.その他 以上、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

>1.制約だけが削除されて、値は変わらない。 子表の制約も削除されますが、子表のデータは残ります。 試してみましょう。 SQL> create table oya_table 2 ( 3 col1 number PRIMARY KEY 4 ); 表が作成されました。 SQL> SQL> SQL> create table ko_table 2 ( 3 col1 number PRIMARY KEY 4 ); 表が作成されました。 SQL> SQL> ALTER TABLE ko_table 2 ADD CONSTRAINT fk_ko_table 3 FOREIGN KEY (col1) 4 REFERENCES oya_table(col1); 表が変更されました。 SQL> SQL> SQL> SQL> insert into oya_table values(1); 1行が作成されました。 SQL> insert into oya_table values(2); 1行が作成されました。 SQL> SQL> insert into ko_table values(3); insert into ko_table values(3) * 行1でエラーが発生しました。: ORA-02291: 整合性制約(SYS.FK_KO_TABLE)に違反しました - 親キーがありません SQL> insert into ko_table values(1); 1行が作成されました。 SQL> SQL> commit; コミットが完了しました。 SQL> SQL> select * from oya_table; COL1 ---------- 1 2 SQL> select * from ko_table; COL1 ---------- 1 SQL> SQL> drop table oya_table cascade constraint; 表が削除されました。 SQL> select * from ko_table; COL1 ---------- 1 SQL> insert into ko_table values(3); 1行が作成されました。 SQL> select * from ko_table; COL1 ---------- 1 3

vmax666
質問者

お礼

早速の回答有り難うございます。 詳細な検証結果まで載せていただき、非常に参考になりました。

関連するQ&A