MySQL DROP 所有表,忽略外键

标签 mysql foreign-keys innodb sql-drop

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

最佳答案

我发现生成的 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 TABLE `VIEW_NAME` 语句更正为 DROP VIEW `VIEW_NAME`

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

"RESTRICT and CASCADE are permitted to make porting easier. In MySQL 5.5, they do nothing."

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

SET FOREIGN_KEY_CHECKS = 0

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

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 选项会有所帮助。

关于MySQL DROP 所有表,忽略外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3476765/

相关文章:

python - 无法在 virtualenv 中安装 mysql-connector-python

MySQL 添加外键到现有表 PHP

mysql - 全文搜索 Innodb 失败,MyIsam 返回结果

mysql - 如何防止 "note : Table does not support optimize, doing recreate + analyze instead"

MySQL:创建表时出现 FK 错误 (errno 150)

mysql - 为什么我需要在 MySQL 中引用表名 `5e09c9c09e9ba0cceccb3701`?

PHP 提交后不在下拉列表中显示更新的值

MySQL 慢查询: count articles, group by category,有什么办法优化?

php - Mysql表之间的关系

sql - 如何查找哪些表引用了 Oracle SQL Developer 中的给定表?