2

我正在尝试将此代码插入到我的 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

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

4

2 回答 2

3

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

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

取自mysql 文档

外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表,它们指向其父表。FOREIGN KEY 子句在子表中指定。

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

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

于 2016-03-21T15:38:06.163 回答
0

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

否则,如果您希望动态创建艺术家,请进行触发器。

希望它会澄清。

于 2016-03-21T15:37:56.213 回答