DROP TABLE和truncate table的区别?(Difference between d

2019-07-04 03:53发布

我有一些表格,我作为建立我的报告汇总的一部分。 我不需要他们后来都没有。 有人提到截断他们,因为它会更快。

Answer 1:

从表中删除记录日志的时间间隔删除并执行删除删除的记录触发器。 截断是一个更强大的命令清空一个表,而无需登录的每一行。 SQL Server会阻止你从截断表的外键引用,因为需要检查每一行的外键它。

截断通常是超快速,适合于在一个临时表中清理出的数据。 它保留表的结构以备将来使用。

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

见这个MSDN文章更多信息



Answer 2:

DROP TABLE删除表。

TRUNCATE TABLE清空,但离开它的结构为未来的数据。



Answer 3:

DROP和TRUNC做不同的事情:

TRUNCATE TABLE

删除表中的所有行,而无需登录个人行删除。 truncate table要类似于没有WHERE子句的DELETE语句; 但是,TRUNCATE TABLE速度更快,使用较少的系统和事务日志资源。

DROP TABLE

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

至于速度感到关切的差异要小。 不管怎样,如果你不需要表结构可言,当然使用DROP。



Answer 4:

我想你指DELETE TABLE和truncate table的区别。

DROP TABLE

从数据库中删除表。

删除表格

没有条件删除所有行。 如果有触发和参考那么这将每一行处理。 另外一个索引将被修改,如果有一个。

TRUNCATE TABLE

设置行数为零,没有记录每一行。 这是因为其他许多更快两者。



Answer 5:

这些答案都没有指出有关这两项业务的重要区别。 DROP TABLE是可以回退的操作。 但是,截断不能被回滚 [“TRUNCATE TABLE”可以回滚以及]。 这样一来删除一个非常大的表可以是非常昂贵的,如果有很多行,因为它们都必须记录在情况下,你决定要回滚一个临时空间。

通常情况下,如果我想摆脱一个大表,我将截断它,然后放下它。 这样的数据将不被记录nixed,桌子可以下降,因为需要记录任何数据下降将是非常便宜的。

重要的是要指出,尽管这只是截断数据删除,离开桌子,而将下降,事实上,删除数据和表本身。 (假设外键不排除这种行动)



Answer 6:

TRUNCATE表将所有旧的索引和诸如此类的东西。 DROP TABLE会很明显,摆脱了桌子,并要求您稍后重新创建它。



Answer 7:

降摆脱了表的完全消除的定义也是如此。 截断清空表,但没有摆脱定义。



Answer 8:

截断表清空表。 删除表中完全删除。 要么一会快,但是在丢弃它可能会更快(取决于你的数据库引擎)。

如果你不需要它了,放弃它,所以它不会弄乱你的架构。



Answer 9:

删除表A,而不是TRUNCATE表A? 一个常见的误解是,他们做同样的事情。 事实并非如此。 事实上,两者之间有许多差异。

DELETE是在每行的基础上一个记录的操作。 这意味着,每行删除得到记录和物理删除。

您可以删除,不会违反约束,而离开外键或代替任何其他contraint任何行。

TRUNCATE也是一个记录的操作,但以不同的方式。 截断日志中存在数据的数据页的重新分配。 数据页的重新分配意味着你的数据行实际上仍然存在于数据的页面,但程度已标记为重用为空。 这是什么使截断更快的操作而进行过删除。

你不能截断任何具有外键约束的表。 你将不得不删除约束上,截断表,并重新将约束上。

TRUNCATE将任何标识列重置为默认的种子值。



Answer 10:

DROP TABLE

DROP TABLE [table_name];

的DROP命令用于从数据库中删除一个表。 这是一个DDL命令。 所有行,索引和表的权限也将被删除。 DROP操作不能被回滚。

DELETE表

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

DELETE命令是一个DML命令。 它可以用来删除WHERE子句中指定的所有行或从基于的条件表中的某些行。 它使用的是行锁执行时,表中的每一行被锁定为删除。 它维护事务日志,因此它比TRUNCATE慢。 DELETE操作可以回退。

截断表

TRUNCATE TABLE [table_name];

将truncate命令从表中删除所有行。 它不会记录每一行的缺失,而是记录表,这使得它比DELETE更快的数据页的重新分配。 它使用一个表锁执行,则锁定整个表进行删除所有记录。 这是一个DDL命令。 TRUNCATE操作不能被回滚。



Answer 11:

截断删除所有的行,而不是表本身,它本质上是等同于不带where子句中删除,但通常速度更快。



Answer 12:

我有发言的一个修正上面......“截断不能回滚”

截断可以回滚。 有一些情况下,当你不能做一个截断或删除表,比如当你有一个外键引用。 对于一个任务,如月度报告,我可能只是删除表一次,我并不需要它了。 如果我更经常做这个汇总报告,然后我可能会保持桌面来代替,而截断。

希望这有助于,这里的一些,你应该找到有用的详细信息...

请详见下面的文章: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

此外,有关删除与截断更多详情,请参阅这篇文章: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

谢谢! 杰夫



Answer 13:

truncate table要在功能上等同于DELETE语句与没有WHERE子句:既删除表中的所有行。 但truncate table要更快,使用较少的系统和事务日志资源不是删除。

DELETE语句删除行一次一个,并记录在事务日志中删除的每一行的条目。 截断表通过重新分配用于存储表数据的数据页删除数据,只有页面解除被记录在事务日志中。

截断表删除表中的所有行,但表结构及其列,约束,索引等依然存在。 通过为新的行的标识中使用的计数器复位到所述种子为列。 如果您想保留身份柜台,请删除。 如果你想删除表定义及其数据,请使用DROP TABLE语句。

你不能对一个外键约束引用的表使用TRUNCATE TABLE; 相反,使用DELETE语句没有WHERE子句。 由于TRUNCATE TABLE不记录,它不能激活触发器。

TRUNCATE TABLE可能无法参与索引视图的表来使用。

从http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx



Answer 14:

在SQL标准,DROP TABLE删除表和表模式 - TRUNCATE删除所有行。



Answer 15:

这些问题的答案在这里匹配的问题,但我会回答你没有问这个问题。 “我应该用截断或删除?” 如果你是从表中删除所有行,你通常会要截断,因为它要快得多。 为什么要快得多? 至少在甲骨文的情况下,它重置的高水位标记 。 这基本上是数据的解引用,并允许分贝重用它别的东西。



Answer 16:

DELETE VS TRUNCATE

  1. DELETE语句删除行一次一个,并记录在事务日志中删除的每一行的条目。 TRUNCATE TABLE被重新分配用于存储表数据和记录只在事务日志中的页面解除数据页删除数据
  2. 我们可以使用WHERE子句DELETETRUNCATE你不能使用它
  3. DELETE使用行锁执行的语句,表中的每一行被锁定为删除。 TRUNCATE TABLE始终锁定表和页,但不是每一行
  4. 一个后DELETE被执行的语句,该表仍然可以包含空pages.If删除操作不使用表锁,表(堆)中将包含许多空页。 对于索引,删除操作可以留出空白页的背后,虽然这些
    网页将很快由一个后台清理过程被释放
  5. TRUNCATE TABLE删除表中的所有行,但表结构及其列,约束,索引等保持
  6. DELETE语句不RESEED的身份列,但TRUNCATE语句RESEEDSIDENTITY
  7. 您不能使用TRUNCATE TABLE表上说:
    1. 被引用的FOREIGN KEY约束。 (您可以截断具有引用自身的外键的表。)
    2. 参与索引视图。
    3. 通过使用事务复制或合并复制发布
  8. TRUNCATE TABLE不能激活触发器,因为该操作不记录各个行删除


Answer 17:

删除声明

DELETE语句删除表中的行和返回的行数从table.in这一说法被删除,我们使用where子句从表中删除数据

  • DELETE语句比截断语句慢,因为它删除的记录逐一

截断声明

截断语句删除或从表中删除所有行。

  • 它比DELETE语句快,因为它删除所有记录从表
  • 截断语句不会返回任何行从表中删除

DROP语句

DROP语句删除所有记录,以及该表的结构



Answer 18:

删除

DELETE命令用于从表中删除行。 A,其中可使用的where子句只删除某些行。 如果没有指定WHERE条件下,所有的行会被删除。 执行删除操作后,您需要提交或回滚事务,以使更改永久或撤消它。

截短

TRUNCATE从表中删除所有行。 该操作不能回滚......因此,TRUCATE速度更快,并尽可能还原空间的DELETE不使用。

来源: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands



Answer 19:

一滴一滴全表和它的所有结构

截断删除所有行从表是不同删除它也删除行的索引



文章来源: Difference between drop table and truncate table?