0

我有一个表中引用的EMPLOYEE外键表。在表中也有在表中引用的外键。DnoDnumberDEPARTMENTDEPARTMENTMgr_ssnSsnEMPLOYEE

我使用创建表

ALTER TABLE employee 
ADD foreign key (dno) references department(dnumber) 
    on delete restrict on update cascade;

(Dno 和 Mgr_ssn 都不是 NULL)

但是现在我很困惑如何插入数据,因为它总是违反参照完整性约束,有什么建议吗?

谢谢 :)

4

1 回答 1

0

外键通常不被赋予“非空”约束。如果有一个新员工没有被分配部门,你会怎么做?或者一个没有经理的新部门。

不过,对于您的问题,您应该使用 Oracle 约束的“ DEFERRABLE ”属性。这意味着,将仅在提交点检查任何约束。因此,您可以先插入 dno 和 empnos,然后再提交。由于 FK 存在,此时将不会出现约束冲突。

ALTER TABLE employee ADD foreign key (dno) references department(dnumber) INITIALLY DEFERRED DEFERRABLE;

--对部门做同样的事情

然后, Insert into emp (...) insert into dept(...) commit;

于 2013-05-18T20:12:48.430 回答