truncate table命令与不带where的delete命令都是删除数据表中的所有记录,对数据表结构无影响。
不同之处在于 :
①truncate table的删除不会写入日志,因此速度会很快,但是也因为如此,对数据的删除时不可恢复的,所以执行时最好先备份
②truncate table是DDL(数据库定义语言:create,drop等)
delete属于DML(数据操纵语言:select,insert,update等),因此truncate table不会触发delete触发器
③以sqlserver为例,若表中存在自增长列(identity),则delete之后水位线不会重置,再次插入数据会出现标识列不连续的状态
可以使用:
DBCC CHECKIDENT (Table_Name,RESEED,10) 将标识位重置为任意数值
而 truncate会将水位线(即标志位)复位。