我有以下两个表:
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限制约束,这样,如果有人试图删除所有者表中的所有者,如果该所有者是宠物的所有者,则删除操作将被拒绝。我知道我必须使用ON_DELETE RESTRICT命令,但是我不知道该怎么做。
我试过了:
ALTER TABLE OWNERS
ADD CONSTRAINT no_delete
FOREIGN KEY (P_ID)
REFERENCES PETS(P_ID)
ON DELETE RESTRICT无济于事。
发布于 2011-02-14 10:19:52
您的语法是正确的。你的逻辑错了。
如果主人的“宠物”表中有一只宠物,您希望防止删除该主人。为此,您需要修改表"pets",并添加一个引用表"owners“的外键约束。
发布于 2011-02-16 05:15:00
Catcall是正确的,下面是正确的ALTER TABLE命令(在DB2 LUW v9.7中测试):
ALTER TABLE pets ADD CONSTRAINT no_delete FOREIGN KEY (P_ID) REFERENCES owner(P_ID) ON DELETE RESTRICT;
然后,当我尝试使用以下命令从所有者表中删除Steve时:
从所有者中删除
,其中O_ID = 'Steve';
不出所料,我收到了:
DB21034E该命令被作为SQL语句处理,因为它不是有效的命令行处理器命令。在SQL处理过程中,它返回: SQL0532N父行不能删除,因为关系"DB2INST1.PETS.NO_DELETE“限制了删除。SQLSTATE=23001
然后,为了确保它完全按照预期工作,我删除了Steve的狗:
从O_ID = 'Steve‘的宠物中删除
并重新尝试将Steve从所有者表中删除,并且成功了!
https://stackoverflow.com/questions/4988195
复制相似问题