TRUNCATE快速删除表中的所有数据
drop删除表备注
与 DELETE 语句相⽐,TRUNCATE TABLE 具有以下优点:
所⽤的事务⽇志空间较少。
DELETE 语句每次删除⼀⾏,并在事务⽇志中为所删除的每⾏记录⼀个条⽬。TRUNCATE TABLE 通过释放⽤于存储表数据的数据页来删除数据,并且在事务⽇志中只记录页释放。
使⽤的锁通常较少。
当使⽤⾏锁执⾏ DELETE 语句时,将锁定表中各⾏以便删除。TRUNCATE TABLE 始终锁定表和页,⽽不是锁定各⾏。
表中将毫⽆例外地不留下任何页。
执⾏ DELETE 语句后,表仍会包含空页。例如,必须⾄少使⽤⼀个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执⾏删除操作时没有使⽤表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下⼀些空页,尽管这些页会通过后台清除进程迅速释放。
TRUNCATE TABLE 删除表中的所有⾏,但表结构及其列、约束、索引等保持不变。若要删除表定义及其数据,请使⽤DROP TABLE 语句。
如果表包含标识列,该列的计数器重置为该列定义的种⼦值。如果未定义种⼦,则使⽤默认值 1。若要保留标识计数器,请使⽤ DELETE。
限制
不能对以下表使⽤ TRUNCATE TABLE:
由 FOREIGN KEY 约束引⽤的表。
参与索引视图的表。
通过使⽤事务复制或合并复制发布的表。
对于具有以上⼀个或多个特征的表,请使⽤ DELETE 语句。
TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个⾏删除。有关详细信息,请参阅 CREATE TRIGGER (Transact-SQL)。