如何解决外键约束在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] 举报,一经查实,本站将立刻删除。