drop table和truncate table之间的区别?

Bri*_*n G 76 sql sql-server sybase

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

Jos*_*shL 97

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

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

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

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

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

cee*_*yoz 82

DROP TABLE删除表.

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

  • 这是关键的区别. (21认同)
  • 伙计,这比你知道的要多得多;) (4认同)

dar*_*mon 25

DROP和TRUNC做了不同的事情:

TRUNCATE TABLE

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

DROP TABLE

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

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


Hor*_*ux7 20

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

DROP TABLE

从数据库中删除表.

删除表

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

TRUNCATE TABLE

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

  • `设置行数为零'它实际设置为将标识值返回到初始标识种子值. (4认同)

Nat*_*ger 11

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

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

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

  • 这不完全正确,TRUNCATE可以在BEGIN TRANSACTION,TRUNCATE TABLE,ROLLBACK意义上回滚,而不是在"恢复事务日志"意义上.它记录页面的重新分配. (2认同)

小智 6

删除表

DROP TABLE [table_name];
Run Code Online (Sandbox Code Playgroud)

DROP 命令用于从数据库中删除表。它是一个 DDL 命令。表的所​​有行、索引和权限也将被删除。DROP 操作无法回滚。

删除表

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];
Run Code Online (Sandbox Code Playgroud)

DELETE 命令是 DML 命令。它可用于根据 WHERE 子句中指定的条件从表中删除所有行或某些行。它使用行锁执行,表中的每一行都被锁定以进行删除。它维护事务日志,所以它比 TRUNCATE 慢。DELETE 操作可以回滚。

截断表

TRUNCATE TABLE [table_name];
Run Code Online (Sandbox Code Playgroud)

TRUNCATE 命令从表中删除所有行。它不会记录每一行的删除,而是记录表数据页的释放,这使得它比 DELETE 更快。它使用表锁执行,整个表被锁定以删除所有记录。它是一个 DDL 命令。TRUNCATE 操作无法回滚。