小编典典

MySQL DROP 所有表,忽略外键

all

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


阅读 219

收藏
2022-03-11

共1个答案

小编典典

我发现生成的 drop 语句集很有用,并推荐以下调整:

  1. 将生成的 drop 限制在您的数据库中,如下所示:

    SELECT concat(‘DROP TABLE IF EXISTS ', table_name, ';’)
    FROM information_schema.tables
    WHERE table_schema = ‘MyDatabaseName’;

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

注意 2:如果您有 VIEW,则必须 手动更正每个DROP TABLEVIEW_NAME语句。`DROP VIEW `VIEW_NAME

  1. 请注意,根据http://dev.mysql.com/doc/refman/5.5/en/drop-table.html,级联删除是没有意义的/具有误导性的:

“允许 RESTRICT 和 CASCADE 使移植更容易。在 MySQL 5.5 中,它们什么都不做。”

因此,如果您需要,为了使 drop 语句起作用:

SET FOREIGN_KEY_CHECKS = 0

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

SET FOREIGN_KEY_CHECKS = 1
  1. 最终执行应如下所示:

    SET FOREIGN_KEY_CHECKS = 0;
    – Your semicolon separated list of DROP statements here
    SET FOREIGN_KEY_CHECKS = 1;

注意:要更轻松地使用 SELECT 的输出,mysql -B 选项会有所帮助。

2022-03-11