首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >On delete restrict帮助

On delete restrict帮助
EN

Stack Overflow用户
提问于 2011-02-14 09:48:31
回答 2查看 8K关注 0票数 0

我有以下两个表:

代码语言:javascript
复制
    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命令,但是我不知道该怎么做。

我试过了:

代码语言:javascript
复制
ALTER TABLE OWNERS
ADD CONSTRAINT no_delete
FOREIGN KEY (P_ID)
REFERENCES PETS(P_ID)
ON DELETE RESTRICT

无济于事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-14 10:19:52

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

如果主人的“宠物”表中有一只宠物,您希望防止删除该主人。为此,您需要修改表"pets",并添加一个引用表"owners“的外键约束。

票数 4
EN

Stack Overflow用户

发布于 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从所有者表中删除,并且成功了!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4988195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档