MySQL删除所有表,忽略外键

有没有一种简单的方法可以从MySQL数据库中删除所有表,而忽略其中可能存在的任何外键约束

我发现生成的drop语句集很有用,并建议进行以下调整:

  1. 将生成的拖放限制到数据库,如下所示:
选择concat('DROP TABLE IF EXISTS`',TABLE_name`;')
来自信息\u schema.tables
其中,表_schema='MyDatabaseName';

注意1:这不会执行DROP语句,它只会为您提供它们的列表。您需要将输出剪切并粘贴到SQL引擎中才能执行它们

注2:如果您有视图,则必须手动将每个拖放表'VIEW\u NAME`语句更正为拖放视图'VIEW\u NAME`

  1. 注:根据http://dev.mysql.com/doc/refman/5.5/en/drop-table.html,使用级联删除是毫无意义的/误导性的:

“允许使用限制和级联来简化移植。在MySQL 5.5中,它们什么都不做。”

因此,为了使drop语句在需要时工作:

设置外键检查=0

这将禁用引用完整性检查-因此,当您完成所需的删除操作后,您将需要使用重置密钥检查

设置外键检查=1
  1. 最终执行应如下所示:
设置外键检查=0;
--此处以分号分隔的DROP语句列表
设置外键检查=1;

注意:为了更容易地使用SELECT的输出,mysql-B选项会有所帮助

发表评论