清空数据库的内容
问题描述:
我有一个庞大的数据库与复杂的关系,我如何删除所有表内容而不违反外键约束,有没有这样的方式来做到这一点?清空数据库的内容
请注意,我写一个SQL脚本文件来删除表,如下面的例子:
delete from A
delete from B
delete from C
delete from D
delete from E
,但我不知道我应该开始什么表。
答
在SQL Server中,有做你的要求没有原生的方式。根据您的特定环境限制,您确实有几个选项:
- 找出表格之间的关系,并开始按照从foreigns到父母的适当顺序删除行。这对于大量的对象来说可能是耗时的,但对于最小的破坏来说是“最安全的”。
- 禁用外键约束和TRUNCATE TABLE。如果你处理大量数据,这会更快一些,但你仍然需要知道你所有的关系在哪里。如果您使用的表格数量较少,则不会太糟糕,尽管选项1变得同样可行
- 编写数据库对象和DROP DATABASE/CREATE DATABASE。如果您不关心数据库的原始拆卸,这是另一种选择,但是,您仍然需要了解创建的对象优先级。 SQL Server以及第三方工具提供了脚本对象DROP/CREATE的方法。如果你决定走这条路线,好处是你可以对所有对象进行脚本备份(我喜欢保留“以防万一”),并且只要你的脚本保持同步,未来的下载几乎是即时的任何变化。
正如你所看到的,这不是一个非常简单的过程,因为你试图破坏约束存在的原因。
答
TRUNCATE TABLE tableName
删除表中的所有行,而不 登录个人行删除。 TRUNCATE TABLE类似于没有WHERE子句的 DELETE语句;然而,TRUNCATE TABLE更快,并且 使用更少的系统和事务日志 资源。
答
老兄,把你的问题在面值...你要完全重新创建无数据的架构......忘记了个人查询(太慢了)......只是destroydb,然后创建b(或任何你的RDBM的等价物)......并且你可能想雇用一个合格的DBA。
notee,我不想删除整个数据库 – qablan89 2011-04-24 08:26:52