有没有一种简单的方法可以从 MySQL 数据库中删除所有表,忽略其中可能存在的任何外键约束?
我发现生成的 drop 语句集很有用,并建议进行以下调整:
- 将生成的 drop 限制到您的数据库,如下所示:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';
注 1:这不会执行 DROP 语句,它只是提供它们的列表。您需要将输出剪切并粘贴到 SQL 引擎中才能执行它们。
注意 2:如果您有视图,则必须更正每个视图DROP TABLE `VIEW_NAME`
声明给DROP VIEW `VIEW_NAME`
手动。
- 请注意,每http://dev.mysql.com/doc/refman/5.5/en/drop-table.html 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
- 最终的执行应该是这样的:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;
注意:要更轻松地使用 SELECT 的输出,mysql -B 选项可以提供帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)