13

当我执行以下 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;

我研究了许多类似的案例,但找不到任何解决方案。任何帮助,将不胜感激。

4

3 回答 3

23

您收到该异常的原因是因为您在 table 上插入了一条记录,该记录test_usershosts的值userID不存在于 table 上test_users。与 的值相同hid也不会出现在 table 上test_hosts

test_usershosts依赖于表:test_userstest_hosts。因此,请确保在 table 上插入记录时,和test_usershosts的值已经存在于父表中:和 .hiduseridtest_userstest_hosts

尝试执行这个查询,它肯定会被插入。

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

我在表上看到该AUTO_INCREMENT选项:test_userstest_hosts, 不需要,因为您在两个表上执行的每个查询都提供值。

于 2012-12-15T12:00:46.163 回答
2

test_users客人的UserID1120test_hosts隐藏= 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");
于 2012-12-15T12:00:24.493 回答
-1

就我而言,以防它为某人服务。我一直在努力寻找解决方案,当将主键也标记为唯一时通常会发生这种情况。但在我的情况下,它只被标记为主要并且没有被标记为唯一,直到我注意到 unica 的选项是“打开的”并且我点击了它,直到那时我让自己建立关系。

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

于 2018-01-15T17:14:02.667 回答