如何正确擦除数据库并重新导入?

How to properly wipe a database, and re-import?

我不确定执行此操作的最佳方法。当我准备将新数据库投入生产时,我需要从在我处理它的同时形成的旧数据库中导入数据。新数据库现在还包含许多用于测试的虚假数据,我必须将其删除,因此全新的完全重新导入似乎是合理的。

现在,截断新数据库中的所有表无法通过,因为外键阻止了它。只需删除数据即可解决该问题,但会将 AUTO_INCREMENT 索引保留为它们所在的值,因此它不是 "proper" 擦除。现在,可能会有更多的属性,比如那个,会被遗留下来(可以这么说),但这是我所知道的唯一一个。

所以我现在的问题是,如果我采用简单的 DELETE 解决方案,这些 "leftover" 数据会对性能造成多大的影响?

还有;有没有一种方法可以更彻底地清除它,当然也允许我保留定义的约束?

首先,我会使用一些 gui 工具为旧数据库创建转储(例如 mySql workbench,或者您喜欢的任何东西)。检查选项 "Export to self-contained file",并检查 "Dump stored procedures and functions"、"Dump events" 和 "Dump triggers".

然后为旧数据库中未包含的所有表获取创建脚本。 您可以通过 "reverse engineer" 选项执行此操作。 如果您在这部分遇到问题,post 会有所帮助。 How to get a table creation script in MySQL Workbench?

当您有旧的数据库转储并为新的 sql 表创建脚本时,将它们合并到一个 sql 文件中。

在第一行添加:

SET FOREIGN_KEY_CHECKS = 0;

在最后一行添加:

SET FOREIGN_KEY_CHECKS = 1;

运行 脚本。因此,您应该拥有所有表(没有数据的新表和有数据的旧表),并正确设置了所有关系。希望对你有用。