「みんな教えて! 選手権!!」開催のお知らせ

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.その他

以上、よろしくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/10/24 01:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報