MariaDB 10.3上的ALTER TABLE命令出错?如何解决?

时间:2018-10-05 17:06:50

标签: mysql mariadb

我被要求将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来说还比较陌生。如果有人可以帮助,我将不胜感激。谢谢

2 个答案:

答案 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。

您可以做两件事:

  1. 从部门删除具有Mgrssn值的记录,该记录在EMPLOYEE Ssn中不存在
  2. 使用Mgrssn将所有错过的值添加到EMPLOYEE Ssn中不存在的Mgrssn