2017-03-03 96 views
0

我正在測試外鍵違規,並在下面的異常中發現。請建議。 我以下的目標Oracle數據庫中創建 -oracle中的外鍵約束違規

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

運行'從emp'中選擇不同的deptno並顯示輸出。 – Utsav

回答

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中的僱員不再有相應的部門。