无法在表中插入值,外键约束会一直失败

时间:2016-03-21 15:03:49

标签: mysql mysql-error-1452

我正在尝试将此代码插入我的MySQL数据库的Albums表中

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

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

2 个答案:

答案 0 :(得分:1)

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

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

取自mysql docs

  

外键关系涉及一个包含该表的父表   中心数据值和具有相同值的子表   回到它的父母。 FOREIGN KEY子句在子节点中指定   表

     

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

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

答案 1 :(得分:0)

使用外键并不意味着任何隐式自动增量。表中的外键表示记录必须已存在于另一个表中。 请参阅http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html(更改网址中有关您需求的版本)

否则,如果您想要动态创建艺术家,请触发。

希望它能澄清。