一个职工表有部门字段,此部门字段存放的是部门表的主键(部门id),我想删除部门表中的一条记录,总是删除不掉,而我想删除职工表的某一部门的所有职工也删不掉(通过通过delete from emp(职工表) where deptno(部门编号) =8; ),报错都是主外键约束的错误,怎么回事啊? 
如果有主外键关联,会有什么要求呢?如何将某一部门删除,并把职工表中,这个部门的人全部删除呢?

解决方案 »

  1.   

    级连删除
    ALTER TABLE EMPLOYEE ADD (CONSTRAINT FK_P FOREIGN KEY (DEPID)
    REFERENCES DEP(DEPID) ON DELETE CASCADE);
      

  2.   


    报错都是主外键约束的错误*----- 这说明已经有外键约束了但是显然当时创建的时候没有指定为级联删除,从而导致现在无法删除你可以查出 EMP 表上的外键,先 DROP 掉,然后用一楼的语句重建即可。后续只要执行 delete from dept where id=8; 即可级联删除 emp 表中的记录。--查看外键:
    SELECT CONSTRAINT_NAME
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME='EMP' AND CONSTRAINT_TYPE='R';注意:外键是建立在 EMP 表上