错误1452(23000):无法添加或更新子行:外键约束失败

时间:2012-12-15 11:47:04

标签: mysql sql

执行以下SQL命令时:

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;

我调查过很多类似的案例,但找不到任何解决办法。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:19)

您获得该异常的原因是因为您在表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_INCREMENTtest_users上的test_hosts选项不需要,因为您要在两个表上执行的每个查询上提供值。

答案 1 :(得分:2)

test_users来宾的UserID 1120test_hostsINSERT INTO test_usershosts (RID,userid,hid,Usr,Pass) VALUES (NULL,1,1,"user","pass"); hid = 30

你必须改变

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

为:

{{1}}

答案 2 :(得分:-1)

在我的情况下,如果它为某人服务。 我很难找到解决方案,当主键也被标记为唯一时,通常会发生这种情况。 但在我的情况下,它只标记为主要,并没有标记为唯一,直到我注意到unica的选项是"打开"然后我点击它,直到那时我让自己建立了关系。

然后记录......检查您的主键是否也是唯一的。