我被要求将DEPARTMENT的Mgrssn与EMPLOYEE的Ssn相关联,并使用ALTER TABLE命令添加外键约束。我已经尝试过以下命令:
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgrssn) REFERENCES EMPLOYEE(Ssn);
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgrssn) REFERENCES 'EMPLOYEE'('Ssn');
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgrssn) REFERENCES EMPLOYEE('Ssn');
我不断收到错误
错误1452(23000):无法添加或更新子行:外键 约束失败(
company
。#sql-124c_a
,约束#sql-124c_a_ibfk_1
外键(Mgrssn
)参考employee
(Ssn
)。
我不知道该怎么办了,我对mysql来说还比较陌生。如果有人可以帮助,我将不胜感激。谢谢
答案 0 :(得分:0)
您最近两次尝试应用外键的查询是错误的,应该抛出语法错误,或者给出意外的行为。
以下尝试是正确的:
ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgrssn) REFERENCES EMPLOYEE(Ssn);
现在,该错误基本上表明,在父级表DEPARTMENT
的父表的Mgrssn
列中不存在列表Ssn
中的某些行表EMPLOYEE
。
您可以使用LEFT JOIN
识别那些行。请尝试以下操作:
SELECT DEPARTMENT.*
FROM DEPARTMENT
LEFT JOIN EMPLOYEE ON EMPLOYEE.Ssn = DEPARTMENT.Mgrssn
WHERE EMPLOYEE.Ssn IS NULL
您现在需要修复DEPARTMENT
表中的那些行。您可以在Mgrssn
表中更改这些DEPARTMENT
值; 或删除这些行; 或在Mgrssn
表的Ssn
列中添加缺少的EMPLOYEE
值。
答案 1 :(得分:0)
您不能添加带有外键的列,因为在DEPARTMENT表中存在具有Ssn值的EMPLOYEE中不存在的行。
说明:
部门Mgrssn的值例如为100,而EMPLOYEE中的Ssn为100。
您可以做两件事: