首页 文章

无法删除表:外键约束失败

提问于
浏览
40

在MySQL中我想删除一个表 .
我尝试了很多东西,但我不断得到名为 bericht 的表可以't be dropped. This is the error I'得到的错误:

#1217 - 无法删除或更新父行:外键约束失败

我该如何删除此表?

5 回答

  • 0

    这应该做的伎俩:

    SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;
    

    正如其他人所指出的那样,这几乎不是你想要的,尽管问题是什么问题 . 更安全的解决方案是在删除 bericht 之前删除表,具体取决于 bericht . 请参阅CloudyMarble有关如何执行此操作的答案 . 当我不删除并重新创建数据库本身时,我使用bash和我的帖子中的方法删除数据库中的所有表 .

    当其他表对您要删除的表具有外键约束并且您正在使用InnoDB数据库引擎时,会发生 #1217 错误 . 此解决方案暂时禁用检查约束,然后重新启用它们 . 阅读documentation了解更多信息 . 请务必根据 bericht 删除表中的外键约束和字段,否则可能会使数据库处于损坏状态 .

  • 94

    试试这个:

    SELECT * 
    FROM information_schema.KEY_COLUMN_USAGE 
    WHERE REFERENCED_TABLE_NAME = 'YourTable';
    

    这应该可以为您提供哪些表具有您要删除的表的引用,删除这些引用后,或者在此表中引用数据集的数据集,您将能够删除表

  • 6

    使用 show create table tbl_name 查看外键

    您可以使用此语法删除外键:

    ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

    这里还有更多信息(参见Frank Vanderhallen的帖子):http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

  • 56

    这可能与其他模式具有相同的表,这是您收到该错误的原因 .

    您需要首先删除子行,然后删除父行 .

  • 1

    我知道这已经陈旧了一段时间并且已经选择了答案,但是如果允许外键为 NULL ,然后选择 ON DELETE SET NULL ,那该怎么办 .

    基本上,你的表应该像这样改变:

    ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

    ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

    我个人建议同时使用“ON UPDATE CASCADE”以及“ON DELETE SET NULL”以避免不必要的复杂情况,但是你的设置可能会指示不同的方法 .

    希望这可以帮助 .

相关问题