Mysql:错误代码:1452。无法添加或更新子行:外键约束失败

Mysql:错误代码:1452。无法添加或更新子行:外键约束失败,mysql,sql,foreign-keys,sql-insert,Mysql,Sql,Foreign Keys,Sql Insert,我有这张桌子: CREATE TABLE comments( comment_id int(11) NOT NULL auto_increment, user_id int(11) NOT NULL, product_id int(11) NOT NULL, comment_text varchar(1000) COLLATE utf8_czech_ci NOT NULL, uploaded datetime NOT NULL, primary k

我有这张桌子:

CREATE TABLE comments(
    comment_id int(11) NOT NULL auto_increment,
    user_id int(11) NOT NULL,
    product_id int(11) NOT NULL,
    comment_text varchar(1000) COLLATE utf8_czech_ci NOT NULL,
    uploaded datetime NOT NULL,
    primary key(comment_id),
    constraint fk_user_comments foreign key(user_id) references user(user_id) ON UPDATE CASCADE ON DELETE CASCADE,
    constraint fk_product_comments foreign key(product_id) references product(product_id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
我正试图将数据插入到这个表中

INSERT INTO comments(user_id,product_id,comment_text,uploaded) VALUES(1,'brbr',1,Now());
但出于某种原因,我不断地犯下这样的错误:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`project`.`comments`, CONSTRAINT `fk_product_comments` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE CASCADE ON UPDATE CASCADE)

id为1的用户存在,id为1的产品存在,所以现在我不知道是什么导致了问题。

这是因为您没有按照列顺序添加值

这是正确的查询

INSERT INTO comments(user_id,product_id,comment_text,uploaded) VALUES(1,1,'brbr',Now())

你的专栏列表顺序搞砸了。 您正试图插入一行,其
产品id
'brbr'
(MySQL将其视为0),注释文本为
1
(MySQL将其转换为
'1'

重新排序列列表以匹配值(反之亦然)应解决此问题:

INSERT INTO comments
(user_id, product_id, comment_text, uploaded)                
VALUES (1, 1, 'brbr', NOW());
-- Here ---^

今天我遇到了同样的问题,因为我在处理不是我设计的模式。我添加了表和关系(FK),一切都变得一团糟

经过调查,我发现另一个伙伴正在使用MyIsam引擎来处理该表,而我正在使用InnoDB


将表从MyIsam更改为InnoDB解决了这个问题

您没有为主键注释id插入值。这是错误的。先把它修好。您还可以共享产品和用户表中的结构和数据吗?而product_id声明为int,您提供的是一个字符串值,这是错误的。这就是你的查询失败的原因。哦,f。。。我现在我觉得自己很蠢:D。谢谢。@Venkat:“你没有为主键注释id插入值。这是错误的”哈?这是一个
自动增量
字段。重点不在于自己设置。噢,谢谢你指出这一点。同意。请解释你的答案,而不仅仅是放弃密码。对不起。我是新来的@Otbit“1年2个月会员”中的Lightness Races(轻松竞赛):是的,但我从上个月开始就很活跃。好吧,这足够让我意识到答案应该提供知识、洞察力和证据,而不仅仅是“这里有一些代码要运行;相信我!”总之,现在更好了。祝您有个美好的一天!