我每次尝试时都会被困在这个问题上 - 它会出现以下错误:无法验证 - 找不到父密钥。
这里是代码(http://i.imgur.com/6JBzTiM.jpg):
我可以在Employees表中创建主键并将其分配给EmployeeId。但是当试图在WorkPackages表中添加它作为外键时(使用下面的代码)
ALTER TABLE WORKPACKAGES
ADD FOREIGN KEY (EMPLOYEEID) REFERENCES EMPLOYEES (EMPLOYEEID);
它不断提出验证错误。
我做错了什么?
答案 0 :(得分:18)
ALTER TABLE WORKPACKAGES
ADD FOREIGN KEY (EMPLOYEEID) REFERENCES EMPLOYEES (EMPLOYEEID);
当强制执行此密钥时,Oracle会检查Workcages表中存在的所有employeeid是否存在于Employees表中。
您的选择:
SELECT employeeid
FROM workpackages
WHERE employeeid NOT IN (SELECT employeeid
FROM employees);
然后将它们插入到员工表中。
另一种选择是使用NOVALIDATE,以便不检查现有数据,但将验证任何新的插入/更新。有关此问题,请参阅this fiddle了解。
答案 1 :(得分:0)
当我尝试添加约束外键时,同样的问题让我很困惑。现在我已经成功了。我键入了父表中的一些值。例如:
改变表A. 添加约束A_01外键(CODE)引用B(CODE); 我键入:插入B(CODE)值(0); 然后它有效!