- ベストアンサー
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.その他 以上、よろしくお願い致します。
- みんなの回答 (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
お礼
早速の回答有り難うございます。 詳細な検証結果まで載せていただき、非常に参考になりました。