数据库命令delete和truncate的区别是什么

数据库命令delete和truncate的区别是什么,第1张

1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE *** 作后的表比DELETE *** 作后的表要快得多。4、TRUNCATE不能触发任何DELETE触发器。5、不能授予任何人清空他人的表的权限。6、当表被清空后表和表的索引将重新设置成初始大小,而delete则不能。7、不能清空父表。TRUNCATE TABLE (schema)table_nameDROP(REUSE) STORAGE 在默认是 DROP STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊情况下使用 REUSE STDELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除 *** 作作为事务记录在日志中保存以便进行进行回滚 *** 作。TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除 *** 作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

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 *** 作前速度一样。

当表中的数据不需要时 则应该删除该数据并释放所占用的空间 删除表中的数据可以使用Delete语句或者Truncate语句 下面分别介绍 一 delete语句 ( )有条件删除 语法格式 delete [from] table_name [where condition]; 如 删除users表中的userid为 的数据 delete from users where userid= ; ( )无条件删除整个表数据 语法格式 delete table_name; 如 删除user表中的所有数据 delete users ; 二 Truncate语句 使用Truncate语句是删除表中的所有记录 语法格式 Truncate [table] table_name; ( )删除所有记录不保留记录占用空间 Truncate [table] table_name [drop storage]; 如 删除users表中的所有数据并不保存占用空间 Truncate table users drop storage; 由于默认使用drop storage关键字 所以可以省略 drop storage; ( )删除所有记录保留记录占用空间 Truncate [table] table_name [reuse storage]; 如 删除users表中的所有数据并保存占用空间 Truncate table users reuse storage; 三 两种删除语句的对比 由于delete语句删除记录时候 记录是逐条删除的 而Truncate 语句删除数据时不产生回退信息 所以如果需要删除大量数据的时候使用delete则占用较多的系统资源 而如果使用Truncate 则会快的多 下面通过实例说明一下 首先建立user表 create table users ( userid varchar ( ) username varchar ( ) userpass varchar ( ) );复制代码 接着插入一条数据 insert into users values( GavinDream ); 使用复制插入方法插入几万条数据 insert into users(userid username userpass) select from users;我插入了 条数据 使用delete删除花费时间为 seconds 然后又插入了二倍的数据 但使用truncate花费时间仅仅为 seconds 如下图所示 lishixinzhi/Article/program/Oracle/201405/30860

以上就是关于数据库命令delete和truncate的区别是什么全部的内容,包括:数据库命令delete和truncate的区别是什么、truncate和delete的区别、oracle数据库删除数据Delete语句和Truncate语句的使用比较等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9503062.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存