truncate和delete的区别在于四个方面:1. 条件删除、2. 事务回滚、3. 清理速度、4. 高水位重置。因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。
公司主营业务:网站设计、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出汉南免费做网站回馈大家。
1. 条件删除
这个比较好理解,因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。
2. 事务回滚
由于delete是数据操作语言(DML - Data Manipulation Language),操作时原数据会被放到 rollback segment中,可以被回滚;而truncate是数据定义语言(DDL - Data Definition Language),操作时不会进行存储,不能进行回滚。
3. 清理速度
在数据量比较小的情况下,delete和truncate的清理速度差别不是很大。但是数据量很大的时候就能看出区别。由于第二项中说的,truncate不需要支持回滚,所以使用的系统和事务日志资源少。delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项,固然会慢,但是相对来说也较安全。
4. 高水位重置
随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),delete操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用delete,就算将表中的数据减少了很多,在查询时还是很和delete操作前速度一样。
TRUNCATE
TABLE
删除表中的所有行,而不记录单个行删除操作。
语法
TRUNCATE
TABLE
name
参数
name
是要截断的表的名称或要删除其全部行的表的名称。
注释
TRUNCATE
TABLE
在功能上与不带
WHERE
子句的
DELETE
语句相同:二者均删除表中的全部行。但
TRUNCATE
TABLE
比
DELETE
速度快,且使用的系统和事务日志资源少。
DELETE
语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE
TABLE
通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE
TABLE
删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用
DELETE。如果要删除表定义及其数据,请使用
DROP
TABLE
语句。
对于由
FOREIGN
KEY
约束引用的表,不能使用
TRUNCATE
TABLE,而应使用不带
WHERE
子句的
DELETE
语句。由于
TRUNCATE
TABLE
不记录在日志中,所以它不能激活触发器。
TRUNCATE
TABLE
不能用于参与了索引视图的表。
示例
下例删除
authors
表中的所有数据。
TRUNCATE
TABLE
authors
权限
TRUNCATE
TABLE权限默认授予表所有者、sysadmin固定服务器角色成员、db_owner
和
db_ddladmin
固定数据库角色成员且不可转让。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:Oracle给用户授权truncatetable的实现方案delete
from
表名与truncate
table
表名区别SQL中Truncate的用法golang实战之truncate日志文件详解tf.truncated_normal与tf.random_normal的详细用法smarty中改进truncate使其支持中文的方法SQL
Server中TRUNCATE事务回滚操作方法实例理解SQL中truncate和delete的区别详解SQL中drop、delete和truncate的异同Mysql开启慢SQL并分析原因
delete和truncate命令之间的差别
1、命令类型
delete是数据操作语言(DML)命令;而truncate是数据定义语言(DDL)命令。
2、功能
delete命令根据指定的SQL语句从表中删除单个,多个或所有记录;而truncate命令从数据库中删除所有记录和表结构。
3、Where子句
delete命令支持WHERE子句,可以使用带有DELETE的where子句来过滤和删除特定记录;而,truncate命令不支持WHERE子句。
4、锁定
delete命令采用行级锁定,表中的每一行都被锁定以进行删除;truncate命令采用表级锁定,锁定了整个表以删除所有记录。
5、索引视图
delete命令可以与索引视图一起使用;而,truncate命令不能与索引视图一起使用。
6、执行速度
由于delete命令维护日志,因此速度很慢。但是,由于truncate命令在事务日志中维护最少的日志记录,因此执行速度更快。
7、表结构
delete命令不会影响表结构,而truncate命令会从数据库中删除表结构。
8、事务空间
delete命令比truncate命令使用更多的事务空间。