我被要求将部门的mgrssn与员工的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还比较陌生。如果有人能帮忙,我将不胜感激。谢谢您
2条答案
按热度按时间bvuwiixz1#
最后两次尝试应用外键的查询是错误的,应该抛出语法错误,或者给出意外行为。
以下尝试是正确的:
现在,错误基本上表明chid表中有一些行
DEPARTMENT
其中列的值Mgrssn
列中不存在Ssn
父表的EMPLOYEE
.您可以使用
LEFT JOIN
. 请尝试以下操作:现在需要修复
DEPARTMENT
table。你可以改变这些Mgrssn
中的值DEPARTMENT
表格;或移除这些行;或者加上那些失踪的Mgrssn
中的值Ssn
列EMPLOYEE
table。rqqzpn5f2#
不能添加带外键的列,因为在department表中存在的行在employee中不存在,而ssn值为。
说明:
department mgrssn的值(例如100)在ssn为100的员工中不存在。
你可以做两件事:
从员工ssn中不存在具有mgrssn值的部门中删除记录
将所有缺少的值添加到具有mgrssn且员工ssn中不存在的员工