强制drop mysql绕过外键约束

joh*_*Art 131 mysql foreign-keys sql-drop

我试图删除数据库中的所有表,除了一个,我最终得到以下错误:

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

当然,我可以试错,看看那些关键约束是什么,并最终删除所有表但我想知道是否有一种快速方法强制删除所有表(因为我将能够重新插入那些我不想删除).

谷歌针对某些建议使用以下方法的网站:

mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;
Run Code Online (Sandbox Code Playgroud)

简短的回答是它没有真正做到这一点,因为我最终收到了同样的错误,而我能够删除更多的表.我已经在Stack Overflow上看到了将所有外键链接到某个表的方法,但这样做太费时了,除非我编写所有脚本(在没有其他选项的情况下这是可行的)

数据库是4.1所以我无法使用 DROP DATABASE

想法?

小智 376

这可能对从搜索到此处结束的人有用.确保您尝试删除而不是视图.

SET foreign_key_checks = 0;
-- Drop tables
drop table ...
-- Drop views
drop view ...
SET foreign_key_checks = 1;

SET foreign_key_checks = 0是将外键检查设置为关闭,然后SET foreign_key_checks = 1重新设置外键检查.当关闭检查时,可以删除表,然后重新打开检查以保持表结构的完整性.

  • PAT是我的朋友! (39认同)
  • 这是一个更好的正确答案.解决了删除所有表格或仅删除几个表格的问题.了不起! (5认同)

Ali*_*har 15

如果您使用的是phpmyadmin,则此功能已经存在.

  • 选择要删除的表
  • 从表格列表底部的下拉列表中选择drop
  • 将打开一个新页面,底部有一个复选框,上面写着"外键检查",取消选中它.
  • 接受"是"确认删除.


Otá*_*cio -51

由于您不想保留任何数据,因此删除整个数据库并创建一个新数据库。

  • 这不是答案 (19认同)
  • 这是问题的正确答案,我个人不理解否决票,OP 想要删除数据库,不知道如何删除,并且正在创建替代方案。这个答案实际上回答了OP的原始问题,他在试图解决这个问题时迷失了方向。**OP接受这个答案这一事实强调了这一点。** (7认同)
  • @RobertPounder 这正是我的目标,自从我加入这个网站以来一直如此。我很欣赏你的观点。 (6认同)
  • 哦天啊,我现在感觉很愚蠢,我用数据库的实际名称替换了 DATABASE 这个词,而不是之后添加它,谢谢+1 (3认同)
  • @RobertPounder SO 不仅仅是帮助操作员,它相当于一个可搜索的“如何做”资源,我之所以谈到这个主题是因为我需要禁用外键约束检查,谷歌引导我来到这里。我很高兴删除数据库对于OP来说是一个很好的解决方法,但下面的答案实际上对于“强制删除mysql绕过外键约束”的问题是正确的。 (3认同)