0

我正在尝试将这些值插入到我的 MySQL 数据库中我的一张表上的 Artist_Name 列中

INSERT INTO tbl_Artist (Artist_Name)VALUES ('Taylor Swift');
INSERT INTO tbl_Artist (Artist_Name)VALUES ('Elton John');
INSERT INTO tbl_Artist (Artist_Name)VALUES ('Kanye West');
INSERT INTO tbl_Artist (Artist_Name) VALUES ('Fallout Boy');

但是每当我尝试时,我都会不断收到此错误!

#1452 - Cannot add or update a child row: a foreign key constraint fails
(`b4014107_db2/tbl_Artist`, CONSTRAINT `tbl_Artist_ibfk_1` FOREIGN KEY  
(`Artist_id`) REFERENCES `tbl_Artist` (`Artist_id`)

我假设这与我分配给表本身的 Artist_id 列的外键有关。我只是不确定问题是什么以及如何纠正。

如果有帮助,我可以为您提供表格的完整代码。

CREATE TABLE `tbl_Artist` (  `Artist_id` int(11) NOT NULL auto_increment,    
`Artist_Name` varchar(32) NOT NULL,  PRIMARY KEY  (`Artist_id`),  CONSTRAINT 
`tbl_Artist_ibfk_1` FOREIGN KEY (`Artist_id`) REFERENCES `tbl_Artist` 
(`Artist_id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

任何帮助将不胜感激。

4

2 回答 2

2

这是您的表定义:

CREATE TABLE `tbl_Artist` (
    `Artist_id` int(11) NOT NULL auto_increment,    
    `Artist_Name` varchar(32) NOT NULL, 
    PRIMARY KEY  (`Artist_id`), 
    CONSTRAINT `tbl_Artist_ibfk_1` FOREIGN KEY (`Artist_id`) REFERENCES `tbl_Artist` (`Artist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

这其实有点好笑。您在主键上有一个外键引用回到表本身的主键。因此,您永远不能插入行,因为您需要引用一行。

在任何情况下,主键都不应该是返回自身的外键。所以,只需放弃约束:

CREATE TABLE `tbl_Artist` (
    `Artist_id` int(11) NOT NULL auto_increment,    
    `Artist_Name` varchar(32) NOT NULL, 
    PRIMARY KEY  (`Artist_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
于 2016-03-21T11:52:35.627 回答
0

您的问题是外键使您只插入具有表中已经存在的 ID 的行。所以,解决方案是放弃这个约束,只留下主键。外键用于创建表之间的完整性检查。例如,具有艺术家表外键的专辑表。

于 2016-03-21T11:53:32.967 回答