mariadb 10.3上alter table命令出错?如何修复?

qqrboqgw  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(379)

我被要求将部门的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还比较陌生。如果有人能帮忙,我将不胜感激。谢谢您

eqqqjvef

eqqqjvef1#

最后两次尝试应用外键的查询是错误的,应该抛出语法错误,或者给出意外行为。
以下尝试是正确的:

ALTER TABLE DEPARTMENT ADD FOREIGN KEY (Mgrssn) REFERENCES EMPLOYEE(Ssn);

现在,错误基本上表明chid表中有一些行 DEPARTMENT 其中列的值 Mgrssn 列中不存在 Ssn 父表的 EMPLOYEE .
您可以使用 LEFT JOIN . 请尝试以下操作:

SELECT DEPARTMENT.* 
FROM DEPARTMENT 
LEFT JOIN EMPLOYEE ON EMPLOYEE.Ssn = DEPARTMENT.Mgrssn 
WHERE EMPLOYEE.Ssn IS NULL

现在需要修复 DEPARTMENT table。你可以改变这些 Mgrssn 中的值 DEPARTMENT 表格;或移除这些行;或者加上那些失踪的 Mgrssn 中的值 SsnEMPLOYEE table。

zvokhttg

zvokhttg2#

不能添加带外键的列,因为在department表中存在的行在employee中不存在,而ssn值为。
说明:
department mgrssn的值(例如100)在ssn为100的员工中不存在。
你可以做两件事:
从员工ssn中不存在具有mgrssn值的部门中删除记录
将所有缺少的值添加到具有mgrssn且员工ssn中不存在的员工

相关问题