oracle中的外键约束违规

时间:2017-03-03 08:52:07

标签: oracle

我正在测试外键违规并遇到以下异常。请建议。 我在oracle db中创建了以下对象 -

create table dept as select * from scott.dept;
create table emp as select * from scott.emp;
alter table dept add constraint dept_pk3 primary key(deptno);
alter table emp add constraint emp_pk3 primary key(empno);
alter table emp  add constraint emp_fk_dept foreign key (deptno) references dept(deptno);

我在下面尝试更新查询失败并显示错误消息 -

update dept set deptno=deptno-6;

ERROR at line 1:
ORA-02292: integrity constraint (ORA1.EMP_FK_DEPT) violated - child record found

但是,如果我在查询下方触发它可以正常工作

update dept set deptno=deptno-10;

任何原因?

1 个答案:

答案 0 :(得分:0)

Oracle演示表empdept中的默认数据包含10的倍数的部门编号,即10,20,30,40。

部门40没有相关员工。因此,update dept set deptno=deptno-10;会产生仍然满足外键约束的新数字0,10,20,30,尽管员工现在位于不同的部门。另一方面,update dept set deptno=deptno-6;导致违规,因为10,20,30的雇员不再有相应的部门。