SQL中truncate table和delete的区别
Truncate Table 表名和不带WHERE的Delete 表名功能相同,都是删除表中的所有行,但是TRUNCATE TABLE比DELETE快,而且TRUNCATE TABLE使用的系统和事务日志资源少。
DELETE语句每删除一行,都在事务日志中为所删除的每行记录一项;
TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只事务日志中记录页的释放。
对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 Where 子句的 Delete 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
TRUNCATE TABLE 不能用于参与了索引视图的表。truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令,delete
将会被撤销,而truncate不会被撤销。
truncate是一个ddl语言,向其他所有的dll语言一样,被隐式的提交,不能对truncate
使用rollback命令
truncate将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时。进过
truncate操作后的表比delete操作后的表要快的多。
truncate不能触发任何delete触发器
不能授予任何人清空他人的表的权限
当表被清空后,表和表的索引将重新设置成初始大小,而delete不能。
不能清空父表。