我有一个EMPLOYEE
表,外键Dno
引用Dnumber
表中的DEPARTMENT
。在DEPARTMENT
表中,还有外键Mgr_ssn
引用Ssn
表中的EMPLOYEE
。
我使用
创建了表格ALTER TABLE employee
ADD foreign key (dno) references department(dnumber)
on delete restrict on update cascade;
(Dno和Mgr_ssn都不为空)
但现在我很困惑如何插入数据,因为它总是违反参照完整性约束,有什么建议吗?
谢谢:)
答案 0 :(得分:0)
外键通常不会被赋予“not null”约束。如果有新员工没有被分配部门,您会怎么做?或者没有经理的新部门。
但是,对于您的问题,您应该使用Oracle约束的“ DEFERRABLE ”属性。这意味着,将仅在提交点检查任何约束。因此,您可以先插入dno和empnos,稍后再提交。此时,由于FK存在,因此不存在约束viokation。
ALTER TABLE employee
ADD foreign key (dno) references department(dnumber)
INITIALLY DEFERRED DEFERRABLE;
- 为部门做同样的事情
然后,
Insert into emp (...)
insert into dept(...)
commit;