我正在测试外键违规并遇到以下异常。请建议。 我在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;
任何原因?
答案 0 :(得分:0)
Oracle演示表emp
和dept
中的默认数据包含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的雇员不再有相应的部门。