2012-12-15 60 views
8

當我執行下列SQL命令:ERROR 1452(23000):不能添加或更新子行,外鍵約束失敗

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) 
VALUES (NULL,1,1,"user","pass"); 

我收到以下錯誤信息:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`dm`.`test_usershosts`, CONSTRAINT `test_usershosts_ibfk_1` FOREIGN KEY (` 
userid`) REFERENCES `test_users` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE) 

我的表:

CREATE TABLE IF NOT EXISTS `test_users` (
`userid` int(11) NOT NULL AUTO_INCREMENT, 
`username` varchar(10) NOT NULL DEFAULT '', 
`password` varchar(50) NOT NULL DEFAULT '', 
PRIMARY KEY (userid) 
) ENGINE=InnoDB; 

INSERT INTO `test_users` (`userid`, `username`, `password) VALUES 
(1120, 'guest', '12250170a9624f336ca24'); 

CREATE TABLE IF NOT EXISTS `test_hosts` (
`hid` int(11) NOT NULL AUTO_INCREMENT, 
`UID` int(11) NOT NULL, 
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (hid) 
) ENGINE=InnoDB; 

INSERT INTO `test_hosts` (`hid`, `UID`, `name`) VALUES (30, 10, 'MU'); 

CREATE TABLE IF NOT EXISTS `test_usershosts` (
`RID` int(11) NULL AUTO_INCREMENT, 
`userid` int(11) , 
`hid` int(11) , 
`Usr` varchar(100) , 
`Pass` varchar(100) , 
PRIMARY KEY (RID), 
INDEX (userid), 
INDEX (hid), 
FOREIGN KEY (userid) REFERENCES test_users (userid) 
    ON DELETE CASCADE ON UPDATE CASCADE, 
FOREIGN KEY (hid) REFERENCES test_hosts (hid) 
    ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB; 

我看着許多類似的情況,但無法找到任何解決方案。任何幫助,將不勝感激。

回答

17

爲什麼你得到這個異常的原因是因爲你在表test_usershosts上插入記錄其中userID的值不存在於表test_users上。同樣的hid的值也不存在於表test_hosts上。

test_usershosts依賴於表:test_userstest_hosts。因此,請確保在表test_usershosts上插入記錄時,父表上已存在hiduserid的值:test_userstest_hosts

嘗試執行此查詢,當然它會被插入。

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) 
VALUES (NULL,1120,30,'user','pass'); 

我看到AUTO_INCREMENT選項上表:test_userstest_hosts,都沒有必要的,因爲你是在你的兩個表執行的每個查詢提供值。

+0

我是一個noob,當它來到SQL,特別是關係型DBS.I雖然我只需要傳遞行ID,因此1,1 :) – Himal

2

test_users客人的UserIDtest_hosts1120和 躲在= 30

必須更改

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) VALUES (NULL,1,1,"user","pass"); 

到:

INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) VALUES (NULL,1120,30,"user","pass"); 
+0

感謝您的幫助:) – Himal

-1

在我的情況下,如果它服務於某人。 我一直在努力尋找解決方案,通常在製作主鍵時發生的情況也被標記爲唯一。 但在我的情況下,它只被標記爲主要的,它並沒有被標記爲唯一的,直到我注意到unica的選項是「打開」,我點擊它,直到那時我讓我自己建立關係。

然後爲了記錄...檢查您的主鍵也是唯一的。

+0

主鍵始終是唯一的:https://en.m.wikipedia.org/wiki/Primary_key – Gildas

相關問題