微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

外键约束在MySql中失败

如何解决外键约束在MySql中失败

我已使用以下命令创建了以下两个表:

CREATE TABLE Emp (
   Empno INT(11) NOT NULL,Ename VARCHAR(50) NOT NULL,Job VARCHAR(50) NULL,Mgrno INT(11) NULL,Hiredate VARCHAR(50) NULL,Sal INT(11) NOT NULL,Comm INT(11) NULL,Deptno INT(11) NOT NULL,CHECK(Sal >= 1000 AND Sal <= 10000),PRIMARY KEY (Empno),FOREIGN KEY (Deptno) REFERENCES Emp(Empno)
);

CREATE TABLE Dept (
   Deptno INT(11) NOT NULL,Dname VARCHAR(50) NOT NULL,Location VARCHAR(50) NOT NULL,PRIMARY KEY (Deptno)
);

但是,当我尝试使用以下命令在Emp表中输入数据时:

INSERT INTO Emp (Empno,Ename,Job,Mgrno,Hiredate,Sal,Comm,Deptno) VALUES (7839,'ALAN','TRAINER',NULL,'17-NOV-13',5000,10);

我得到一个错误

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`s102859495_db`.`Emp`,CONSTRAINT `Emp_ibfk_1` FOREIGN KEY (`Deptno`) REFERENCES `Emp` (`Empno`))

我不知道是什么导致了此错误以及如何解决它。我已经在“部门”表中输入了相应的条目:

INSERT INTO Dept(Deptno,Dname,Location) VALUES (10,'CONSULTING','ADELAIDE'); 

任何帮助将不胜感激。

解决方法

您在 Emp 表创建查询中使用了错误的语法。

您正在为 REFERENCES Emp(Empno)提供参考密钥。这将是参考部门(Deptno)

在下面检查正确的语法

 CREATE TABLE Emp (
   Empno INT(11) NOT NULL,Ename VARCHAR(50) NOT NULL,Job VARCHAR(50) NULL,Mgrno INT(11) NULL,Hiredate VARCHAR(50) NULL,Sal INT(11) NOT NULL,Comm INT(11) NULL,Deptno INT(11) NOT NULL,CHECK(Sal >= 1000 AND Sal <= 10000),PRIMARY KEY (Empno),FOREIGN KEY (Deptno) REFERENCES Dept(Deptno)
);
,

错误消息非常清楚:您正在尝试创建一个属于部门10的新雇员-但是部门表中尚不存在该部门号。外键约束可以防止这种情况。

您可以通过以下查询检查部门是否存在(该查询应返回空结果集):

SELECT * FROM Dept WHERE Deptno = 10;

首先在父表中添加缺少的部门:

-- create the department
INSERT INTO Dept (Deptno,Dname,Location)
VALUES (10,'foo','bar');

-- Then create the employee
INSERT INTO Emp (Empno,Ename,Job,Mgrno,Hiredate,Sal,Comm,Deptno) 
VALUES (7839,'ALAN','TRAINER',NULL,'17-NOV-13',5000,10)

或者:将员工与部门表中已经存在的部门相关。

,

外键(Deptno)参考Emp(Empno)可能是无意义的 外键(deptno)参考dept(deptno)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。