当前位置:  开发笔记 > 数据库 > 正文

drop table和truncate table之间的区别?

如何解决《droptable和truncatetable之间的区别?》经验,为你挑选了5个好方法。

我有一些表,我作为报告汇总的一部分构建.之后我根本不需要它们.有人提到截断它们会更快.



1> JoshL..:

从表中删除记录会记录每次删除,并对删除的记录执行删除触发器.Truncate是一个更强大的命令,可以在不记录每一行的情况下清空表.SQL Server阻止您使用引用它的外键截断表,因为需要检查每行上的外键.

截断通常超快,非常适合清除临时表中的数据.它确实保留了表的结构以供将来使用.

如果您确实要删除表定义以及数据,只需删除表.

有关详细信息,请参阅此MSDN文章


此外,截断表会重置标识种子.这在测试中很有用,因为您可以截断表并插入数据,并且每次都知道标识值是什么.如果您刚刚删除了表中的所有数据,则可以这样做.

2> ceejayoz..:

DROP TABLE删除表.

TRUNCATE TABLE将其清空,但将其结构留给将来的数据.


这是关键的区别.
伙计,这比你知道的要多得多;)

3> daremon..:

DROP和TRUNC做了不同的事情:

TRUNCATE TABLE

从表中删除所有行而不记录单个行删除.TRUNCATE TABLE类似于没有WHERE子句的DELETE语句; 但是,TRUNCATE TABLE更快,并且使用更少的系统和事务日志资源.

DROP TABLE

删除一个或多个表定义以及这些表的所有数据,索引,触发器,约束和权限规范.

就速度而言,差异应该很小.无论如何,如果你根本不需要表结构,当然要使用DROP.



4> Horcrux7..:

我认为你的意思是DELETE TABLE和TRUNCATE TABLE之间的区别.

DROP TABLE

从数据库中删除表.

删除表

没有条件删除所有行.如果有触发器和引用,那么这将处理每一行.如果存在索引,也将修改索引.

TRUNCATE TABLE

将行计数设置为零并且不记录每一行.它和其他两者都快得多.


`设置行数为零'它实际设置为将标识值返回到初始标识种子值.

5> Nathan Feger..:

这些答案都没有指出这两个操作的重要区别.删除表是可以回滚的操作. 但是,truncate无法回滚 ['TRUNCATE TABLE'也可以回滚].这样,如果有很多行,丢弃一个非常大的表可能会非常昂贵,因为它们都必须记录在临时空间中,以防您决定将其回滚.

通常,如果我想摆脱一个大表,我将截断它,然后删除它.这样,数据将被固定而没有记录,并且可以删除该表,并且该下降将非常便宜,因为不需要记录数据.

重要的是要指出截断只是删除数据,离开表,而drop实际上会删除数据和表本身.(假设外键不排除这样的行为)


这不完全正确,TRUNCATE可以在BEGIN TRANSACTION,TRUNCATE TABLE,ROLLBACK意义上回滚,而不是在"恢复事务日志"意义上.它记录页面的重新分配.
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有