如何在DB2中解决错误“通过引用约束删除”?

时间:2013-12-04 19:46:50

标签: db2

所以我遇到的问题是由我们教授提供给我们的任务

  1. 创建表格
  2. 将记录插入每个表格。
  3. 从每个表格中更新和删除(最少1条记录)
  4. 使用遵循创建COLLECTIONS的旧标准的DB2脚本而不是SCHEMAS

    完成了步骤1和2。更新完成。我的删除让我很难过。一个例子就是这个。

    CREATE TABLE UMALIK8.CAMPUS (
    CAMPUS_ID VARCHAR (10) NOT NULL,
    CAMPUS_NAME VARCHAR (30) NOT NULL,
    MANAGER_NUM VARCHAR (10) NOT NULL,
    CONSTRAINT UMALIK8.CAMPUS_PK PRIMARY KEY (CAMPUS_ID),
    CONSTRAINT UMALIK8.CAMPUS_FK FOREIGN KEY (MANAGER_NUM)
    REFERENCES UMALIK8.MANAGER(MANAGER_NUM)
    ON DELETE CASCADE);
    
    INSERT INTO UMALIK8.CAMPUS (CAMPUS_ID, CAMPUS_NAME, MANAGER_NUM)
        VALUES ('King', 'King Campus', 'M021386');
    
    DELETE FROM UMALIK8.CAMPUS
        WHERE CAMPUS_ID = 'King';
    

    因此,当我尝试删除它时,它表示通过引用约束“roomassign_fk”阻止删除这对我没有意义,因为roomassign表就像校园表之后的3或4个表,校园是父表,管理器编号来自管理器表,管理器表的父表是Employee表....所有整个删除脚本我得到参考错误,我不知道为什么。即使在我的成人表中,但我的成人表没有外键,它只有自己的主键,它有一堆子表......

    现在我的脚本的顺序是

    表, 插入, 更新, 删除 所有这些都在一个长脚本中相互分离

    任何想法如何解决这个问题?我究竟做错了什么?

    非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

正如对OP的评论所讨论的那样,问题是关于表CAMPUS的触发器。正如OP所说,我把它作为答案。

是否可能在此表UMALIK8.CAMPUS上存在一个触发器,它将注册表插入到具有FK的表中?

我对触发器的意思是,如果你的表有一个插入触发器后会出现类似这样的事情:你在CAMPUS上运行insert命令,插入发生之后DB2将调用触发器并插入一个ROOM(我认为这是给定FK名称的其他表的名称)一个注册表将被链接(通过FK)到您刚刚插入{{1}的那个然后,如果您尝试删除CAMPUS上的注册表,则会发生引用约束CAMPUS,因为您有一个与"roomassign_fk"

中的注册表链接的子注册表