【问题标题】:1452 - Cannot add or update a child row: a foreign key constraint fails1452 - 无法添加或更新子行:外键约束失败
【发布时间】:2013-09-28 17:07:50
【问题描述】:

我收到此错误:

1452 - 无法添加或更新子行:外键约束 失败。

我已经找到了它们并尝试用

删除这些引用
alter table tillhör drop foreign key kat_id;

但是却得到了这个错误:

#1025 - 重命名 '.\recept\tillh@1ir' 时出错 '.\recept#sql2-1570-3cb'(错误号:152)。

我做错了什么?

【问题讨论】:

    标签: mysql sql foreign-keys


    【解决方案1】:

    查询前运行

    SET FOREIGN_KEY_CHECKS=0
    

    完成后将其设置为 1。

    【讨论】:

    • 是带走数据库还是一张表中的所有外键。对 SQL 还不是很熟悉。问题是由于外键,我无法在第一个表中插入任何内容。
    • 不,它只是忽略外键约束,直到您再次启用它。
    • 但是如果你不确定发布插入查询和表模式。只需在 sql SHOW CREATE TABLE yourTable 中写入并发布结果。
    • 哦,我想我在创建接收时犯了一个错误。不应该有外键: CREATE TABLE recept ( rec_id int(10) NOT NULL AUTO_INCREMENT, namn varchar(30) DEFAULT NULL, portioner int(5) DEFAULT NULL, beskrivning varchar (3000) 默认空值,tillagningstid varchar(20) 默认空值,svårighetsgrad int(2) 默认空值,主键 (rec_id),约束 recept_ibfk_1 外键 (rec_id) 参考文献@9876543 rec_id) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 我该如何摆脱它。试过了,但它想要工作。
    • ALTER TABLE recept DROP FOREIGN KEY recept_ibfk_1
    【解决方案2】:

    我面临同样的问题。我通过清除来解决这个问题,即从子表中删除所有数据并成功完成。

    如果子表包含一些具有外键但不在父表中的数据,即如果有两个名为 Person 的表(具有列 id、名称、地址)和 order(带有列 id、person_id、order_name); order.person_id 是 person.id 的外键,order 表包含 person_id,而 person_id 表中不存在

    您可以使用以下查询解决此问题

    Delete from order where person_id NOT IN (select id from person where person.id = order.person_id)
    

    【讨论】:

      【解决方案3】:

      当我遇到这个问题时,这是由于我在创建外键 id 字段时忘记指定允许的 NULLS。事后我更改了它,但值中已经有 0 了。它在匹配表中找不到0,然后给出了这个错误。解决方法:将零值更新为空值。

      【讨论】:

        【解决方案4】:

        您必须为您的从父表到子表设置空值 或设置相同的值,例如 子表第一个 nam=Derick 父表名=Derick

        【讨论】:

          猜你喜欢
          • 2013-05-11
          • 1970-01-01
          • 1970-01-01
          • 2013-05-03
          • 2021-09-04
          相关资源
          最近更新 更多