2016-03-21 50 views
1

我试图插入此代码到我的相册表上我的MySQL数据库不能将值插入表,外键约束不断失败

INSERT INTO `Albums` (`Albumid`, `Name`, `Numberoftracks`, `Artistid`,  ] 
`Genre`) VALUES (1, "Innuendo", 12, "Queen", "Rock"); 

但每次我尝试时候,我不断收到此错误。

1452 - Cannot add or update a child row: a foreign key constraint fails 
(`b4014107_db1/Albums`, CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`)) 

我知道这件事情做的表内我的外键,但我需要手动输入外键,因为它不是自动递增。

这是表代码。

CREATE TABLE `Albums` ( `Albumid` int(6) NOT NULL, `Name` varchar(50) NOT 
NULL, `Numberoftracks` int(11) NOT NULL, `Artistid` int(6) NOT NULL, 
`Genre` varchar(50) NOT NULL, PRIMARY KEY (`Albumid`), KEY `Artistid` 
(`Artistid`), CONSTRAINT `Albums_ibfk_1` FOREIGN KEY (`Artistid`) 
REFERENCES `Artist` (`Artistid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 

我该如何解决这个问题?我需要将数据输入到表格中。

+0

您是否在艺术家的桌子上添加了艺术家“女王”?因为如果没有,你应该先添加艺术家,否则你的FK将会被违反。 –

+0

另外,ArtistId是一个数字,您正尝试在其中添加VARCHAR。您应该将艺术家'女王'添加到表格艺术家,并获取ArtistId以用于插入您的艺术家。 –

回答

1

artistid是表Albums中的外键。当您尝试在子表中插入一个不存在于父表中的外键时,会出现父子关系错误。 artistid不在您的Artist表中。

另外,要添加的数据类型artistid也是不同的。

mysql docs

两者外键关系涉及到持有 中央数据值的父表和子表具有相同值指向 回其父。 FOREIGN KEY子句在子表 中指定。

如果在父表中没有匹配的 候选键值,它将拒绝尝试在子表中创建 外键值的任何INSERT或UPDATE操作。

先删除您的错误,请将Queens艺术家在Artist表,然后你可以将其插入Albums表。还要更正列artistid的数据类型。