0

次の2つのテーブルがあります。

    Owner:

    O_ID P_ID
    Bob   Sam
    Steve Rex


    Pets

    P_ID O_ID
    Sam  Bob
    Rex  Steve

所有者の2番目の列(P_ID)は、ペットの最初の列(P_ID)への外部キーです。

DB2で、ON_DELETE RESTRICT制約を追加しようとしています。これにより、誰かが所有者テーブルの所有者を削除しようとした場合、その所有者がペットの所有者である場合、削除操作は拒否されます。ON_DELETE RESTRICTコマンドを使用する必要があることはわかっていますが、その方法がわかりません。

私はこれを試しました:

ALTER TABLE OWNERS
ADD CONSTRAINT no_delete
FOREIGN KEY (P_ID)
REFERENCES PETS(P_ID)
ON DELETE RESTRICT

無駄に。

4

2 に答える 2

4

構文は正しいです。あなたの論理は間違っています。

テーブル「pets」にペットがいる場合、所有者が削除されないようにします。これを行うには、テーブル「pets」を変更し、テーブル「owners」を参照する外部キー制約を追加する必要があります。

于 2011-02-14T02:19:52.360 に答える
3

Catcallは正しいです。正しいALTERTABLEコマンドは次のとおりです(DB2 LUW v9.7でテスト済み)。

ALTER TABLE pets ADD CONSTRAINT no_delete FOREIGN KEY(P_ID)REFERENCES owner(P_ID)ON DELETE RESTRICT;

次に、次のコマンドを使用して所有者テーブルからSteveを削除しようとしたとき:

DELETE FROM owner where O_ID ='Steve';

期待どおりに受け取りました:

DB21034Eコマンドは有効なコマンド行プロセッサー・コマンドではなかったため、SQLステートメントとして処理されました。SQL処理中に、次の値が返されました。SQL0532N関係「DB2INST1.PETS.NO_DELETE」によって削除が制限されているため、親行を削除できません。SQLSTATE = 23001

次に、これが期待どおりに完全に機能していることを確認するために、Steveの犬を消去しました。

ペットから削除WHEREO_ID='スティーブ'

そして、所有者テーブルからスティーブを削除する試みを再実行しました、そしてそれはうまくいきました!

于 2011-02-15T21:15:00.190 に答える