龙空技术网

Oracle中delete from 语句与truncate语句的区别

王啸皓月山巅 76

前言:

现时朋友们对“oraclemove做了什么”大体比较注重,各位老铁们都需要分析一些“oraclemove做了什么”的相关内容。那么小编同时在网上网罗了一些有关“oraclemove做了什么””的相关文章,希望朋友们能喜欢,兄弟们快快来了解一下吧!

Oracle中delete from 语句与truncate语句的区别:

1.delete....from....删除语句一定要加where条件,否则全表删除。但是可以使用rollback语句进行回退,delete支持闪回操作。

truncate table table_name; truncate 不可以回退。

原因:delete....from....where......属于DML语句。DML语句,可以回退。insert、update、delete等语句,都可以回退,进行事务操作。而truncate属于DDL数据定义语言,无法回退rollback,不支持闪回。

2.对于少量数据,使用delete删除效率高,因为是逐行删除。

对于海量数据,truncate效率高,因为truncate表分成两个过程,首先是drop table 丢弃整张表。然后再重新建立新表,只建表结构。

3.delete删除不会立即释放空间,只是换个地方存储表,换到UNDO表空间。而truncate 不会,truncate相当于永久删除。

4.delete....from ... where....删除表内某行,会产生碎片。truncate 是删除整张表表,不会产生碎片。

delete....from.....where....删除表中的内容,会产生碎片。表中有高水位线(High Water Mark)的时候,可以通过整理碎片的方法回收表内空间:

方法1. SQL> alter table table_name move;

方法2. 表的导入导出,先导出再重新导入。相当于建立一张新表。

有一颗上进心和持之以恒的态度,才是能否成功的关键!

标签: #oraclemove做了什么