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(轻松竞赛):是的,但我从上个月开始就很活跃。好吧,这足够让我意识到答案应该提供知识、洞察力和证据,而不仅仅是“这里有一些代码要运行;相信我!”总之,现在更好了。祝您有个美好的一天!