【问题标题】:Empty a relational database schema清空关系数据库模式
【发布时间】:2010-12-15 15:37:08
【问题描述】:

我有一个已备份的数据库。现在我正在尝试从原始数据库中删除所有内容并将其恢复为空状态。因为它是一个关系数据库,所以它具有关键约束。有什么工具可以用来做这个吗?

【问题讨论】:

  • 我不知道有什么工具可以做到这一点,但可能没有必要。诀窍是以正确的顺序从表中删除。我曾经不得不在 Oracle 中这样做。 Oracle 有自己的表,其中包含有关我创建的表之间的所有关系的信息。通过查询这个元表,我能够获得正确的关系排序,以便在不违反键约束的情况下删除(我作为评论发布,因为我不知道这在 MySQL 中是否可行)。另一个(运行速度更快)选项是禁用约束、截断、重新启用约束。

标签: mysql database


【解决方案1】:

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

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

您甚至可以使用 information_schema 为您生成截断表语句。像这样的:

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';

【讨论】:

  • 感谢您的帮助。已解决问题。
【解决方案2】:

您可以暂时删除或禁用所有约束,截断所有表,然后恢复约束。我已经为 SQL Server 采用了这种方法,并且效果很好。

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

也许更好的方法是将架构反转为脚本(您将其置于版本控制之下),然后从头开始重新创建数据库。

【讨论】:

  • 谢谢。我会尝试这些解决方案。
猜你喜欢
  • 2017-04-03
  • 2016-09-24
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多