【问题标题】:Mysql: Error Code: 1452. Cannot add or update a child row: a foreign key constraint failsMysql:错误代码:1452。无法添加或更新子行:外键约束失败
【发布时间】:2017-01-14 13:53:54
【问题描述】:

我有这张桌子:

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 的产品,所以现在我不知道是什么导致了问题。

【问题讨论】:

  • 您没有为主键 comment_id 插入值。那是错的。先解决这个问题。您还可以分享产品和用户表中的结构和数据吗?并且 product_id 声明为 int 您提供了一个字符串值,这是错误的。这就是您的查询失败的原因。
  • 天哪……我。现在我觉得自己很愚蠢:D。谢谢。
  • @Venkat:“您没有为主键 comment_id 插入值。这是错误的” 嗯?这是一个auto_increment 字段。重点不是自己设置。
  • 糟糕,感谢您指出这一点。同意。

标签: mysql sql foreign-keys sql-insert


【解决方案1】:

您的列列表的顺序搞砸了。 您正在尝试插入带有'brbr'(MySQL 将其视为0)的product_id1(MySQL 将其转换为'1')的注释文本的行。

重新排序列列表以匹配值(或反之亦然)应该可以解决它:

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

【讨论】:

    【解决方案2】:

    这是因为您没有根据列顺序添加价值。

    这是正确的查询。

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

    【讨论】:

    • 请解释你的答案,而不仅仅是转储代码。
    • 对不起。我是新来的。 @Lightness Races in Otbit
    • "会员1年2个月" :)
    • 是的,但我从上个月开始就很活跃。
    • 好的,现在有足够的时间来认识到答案应该提供知识、洞察力和证据,而不仅仅是“这里有一些代码要运行;相信我!”不管怎样,现在好多了。祝你有美好的一天!
    【解决方案3】:

    我今天遇到了同样的问题,因为我正在处理不是我设计的 Schema。我添加了表格和关系 (FK),一切顺利!

    经过调查,我发现另一个伙伴正在为该表使用 MyIsam Engine,而我正在使用 InnoDB。

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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 2015-02-04
      • 2013-06-11
      • 2014-05-10
      • 2021-07-16
      • 2014-10-23
      • 2019-03-29
      • 2018-05-14
      相关资源
      最近更新 更多