2010-12-15 64 views
5

我有一个我备份的数据库。现在我试图从原始数据库中删除所有内容并将其恢复为空状态。因为它是一个关系数据库,它有关键的限制。有没有我可以使用的工具?清空关系数据库模式

+0

我不知道一个工具可以做到这一点,但它可能没有必要。诀窍是按照正确的顺序从表中删除。我曾经不得不在Oracle中这样做。 Oracle拥有自己的表格,其中包含有关我创建的表格之间所有关系的信息。通过查询这个metatable,我能够得到正确的关系排序,以便删除而不会触及关键的违反条约(我作为评论发布,因为我不知道这是否可能在MySQL中)。另一个(和更快的运行)选项是禁用约束,截断,重新启用约束。 – FrustratedWithFormsDesigner 2010-12-15 15:40:25

回答

7

最简单的方法可能是禁用外键检查,然后截断表格。由于外键已禁用,因此截断表的顺序无关紧要。

set foreign_key_checks = 0; 
truncate table parent; 
truncate table child; 
truncate table ... 

您甚至可以使用information_schema为您生成truncate table语句。这样的事情:

select concat('truncate table ',table_schema,'.',table_name,';') as sql_stmt 
from information_schema.tables 
where table_schema = 'your_schema_name' 
and table_type = 'base table'; 
+0

感谢您的帮助。解决了这个问题。 – 2010-12-17 01:59:23

2

您可以临时删除或禁用所有约束,截断所有表,然后恢复约束。我已经采取了这种方法的SQL Server,它工作正常。

http://lists.mysql.com/mysql/194954

也许一个更好的办法是逆向挤出架构成脚本(你把版本控制之下),然后从头开始重新创建数据库。

+0

Thanks.I将尝试这些解决方案。 – 2010-12-15 16:11:46

+0

谢谢,解决了这个问题。 – 2010-12-17 01:59:38