2016-03-21 53 views
0

我想在我的MySQL數據庫我不能插入值到我的表在MySQL

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 

任何幫助將不勝感激。

回答

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; 
+0

我試過刪除外鍵,但我現在不斷收到'./b4014107_db2/tbl_Artist'重命名爲'./b4014107_db2/#sql2-1ebb-382'錯誤錯誤(錯誤:152 –

+0

@JackRogers。刪除表並重新創建它 –

+0

但是Artist_id是一個外鍵鏈接到另外兩個表,我是否也必須刪除它們? –

0

您的問題是,外鍵使得您只插入一個表中已存在的ID的行。所以,解決方案是放棄這個約束,只留下主鍵。 外鍵用於創建表之間的完整性檢查。例如,包含藝術家表的外鍵的專輯表。