在删除限制SQL帮助

时间:2011-02-14 01:48:31

标签: sql db2 restrict alter

我有以下两个表格:

    Owner:

    O_ID P_ID
    Bob   Sam
    Steve Rex


    Pets

    P_ID O_ID
    Sam  Bob
    Rex  Steve

第二列所有者(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

无济于事。

2 个答案:

答案 0 :(得分:4)

您的语法是正确的。你的逻辑错了。

如果“宠物”表中有宠物,您希望阻止删除所有者。为此,您需要更改表“pets”,并添加引用表“owner”的外键约束。

答案 1 :(得分:3)

Catcall是正确的,这是正确的ALTER TABLE命令(在DB2 LUW v9.7中测试):

  

ALTER TABLE宠物ADD CONSTRAINT   no_delete FOREIGN KEY(P_ID)   REFERENCES所有者(P_ID)ON DELETE   RESTRICT;

然后当我尝试使用以下命令从所有者表中删除Steve时:

  

从O_ID =的所有者处删除   '史蒂夫';

我按预期收到了:

  

DB21034E该命令被处理为   一个SQL语句,因为它不是一个   有效的命令行处理器命令。   在SQL处理期间,它返回:   SQL0532N父行不能   删除因为关系   “DB2INST1.PETS.NO_DELETE”限制   删除。 SQLSTATE = 23001

然后为了确保这完全符合预期,我擦掉了史蒂夫的狗:

  

DELETE FROM pets WHERE O_ID ='Steve'

并重新尝试将史蒂夫从所有者表中移除,并且它有效!