Oracle delete truncate drop 的区别
Oracle 中truncate和delete的区别
删除表中的数据的方法有delete,truncate,
它们都是删除表中的数据,而不能删除表结构,delete可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete操作收作删除表,而truncate操作叫作截断表.
注意:USER_TABLES.BLOCKS EMPTY_BLOCKS (20+3=23)比DBA_SEGMENTS.BLOCKS少一个数据库块,这是因为有一个数据库块被保留用作表头。DBA_SEGMENTS.BLOCKS表示分配给这个表的所有的数据库块的数目。USER_TABLES.BLOCKS表示已经使用过的数据库块的数目(水线)。
先在表中插入100000条记录,并打开时间
SQL> set timing on;
SQL> begin
2 for i in 1..100000 loop
3 insert into t values('10');
4 commit;
5 end loop;
6 end;
7 /
PL/SQL procedure successfully completed.
Table analyzed.
SQL> select segment_name,blocks from dba_segments where segment_name=upper('t');
SEGMENT_NAME BLOCKS
------------------------------ ----------
要想查看delete,truncate那个效率更高,先构建一个大表,然后查看它们分别对些表删除所需的时间。
truncate与delete区别
实例对比Oracle中truncate和delete的区别删除表中的数据的方法有delete,truncate,它们都是删除表中的数据,而不能删除表结构,delete 可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,而truncate只能删除整个表的数据,一般我们把delete 操作收作删除表,而truncate操作叫作截断表.下面分别用实例查看它们的不同1.回滚首先要明白两点1.在oracle 中数据删除后还能回滚是因为它把原始数据放到了undo表空间,2.DML语句使用undo表空间,DDL语句不使用undo,而delete是DML语句,truncate是DDL语句,别外DDL语句是隐式提交.所以truncate操用不能回滚,而delete操作可以.两种操作对比(首先新建一个表,并插入数据)SQL> create table t2 (3 i number4 );Table created.SQL> insert into t values(10);SQL> commit;Commit complete.SQL> select * from t;I----------10Delete删除,然后回滚SQL> delete from t;1 row deleted.SQL> select * from t;no rows selected#删除后回滚SQL> rollback;Rollback complete.SQL> select * from t;I----------10Truncate截断表,然后回滚.SQL> truncate table t;Table truncated.SQL> rollback;Rollback complete.SQL> select * from t;no rows selected可见delete删除表还可以回滚,而truncate截断表就不能回滚了.(前提是delete操作没有提交)2.高水线所有的Oracle表都有一个容纳数据的上限(很象一个水库历史最高的水位),我们把这个上限称为“high water mark”或HWM。
delete和truncate指令
`DELETE` 和`TRUNCATE` 是用于删除数据库中数据的指令。
1. `DELETE` 命令:
`DELETE` 命令用于从数据库表中删除记录。
当你使用`DELETE` 命令时,你需要指定要删除的记录的条件。
如果没有指定条件,那么将会删除表中的所有记录。
例如,假设你有一个名为`students` 的表,并且你想要删除`age` 大于20 的所有学生记录,你可以使用以下SQL 命令:
```sql
DELETE FROM students WHERE age > 20;
```
这将删除`students` 表中所有`age` 大于20 的记录。
2. `TRUNCATE` 命令:
`TRUNCATE` 命令用于快速删除大量的记录。
与`DELETE` 命令相比,`TRUNCATE` 命令通常更快,并且在删除记录时释放表空间。
但是,与`DELETE` 命令不同的是,`TRUNCATE` 命令不能撤销删除操作。
例如,如果你想要删除`students` 表中的所有记录,你可以使用以下SQL 命令:
```sql
TRUNCATE TABLE students;
```
这将删除`students` 表中的所有记录,并且不能撤销这个操作。
请注意,在执行删除操作的指令之前,请务必备份你的数据以防止意外数据丢失。
Oracle删除表的几种方法
Oracle删除表的几种方法2010年07月27日星期二 13:07引言:drop table books;的指令会将表放到回收站里,用flashback table "BIN$1Oiy3qm/QJubov1BwBUOgw==$0" to before drop;就能恢复。
删除表:drop table books purge;是绕过回收站,彻底删除建议你先purge recyclebin;清除当前用户的回收站,不会影响其他用户的回收站或者purge table 表名;清除回收站内指定的表正文:删除表(记录和结构)的语名delete ———— truncate ————dropDELETE (删除数据表里记录的语句)DELETE FROM表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间TRUNCATE TABLE 表名;此操作不可回退.相同点truncate和不带where子句的delete, 以及drop都会删除表内的数据注意:这里说的delete是指不带where子句的delete语句不同点:1. truncate和 delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).4.速度,一般来说: drop>; truncate >; delete5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据oracle中删除表中的一列语句alter table 表名 drop colum 列名。
oracle清空表的语句
oracle清空表的语句摘要:I.简介- 介绍Oracle数据库- 介绍清空表的语句II.清空表的语句- 删除表中所有记录- 使用TRUNCATE TABLE语句- 使用DROP TABLE语句III.注意事项- 避免数据丢失- 确保操作合法IV.结论- 总结清空表的语句- 强调谨慎操作正文:I.简介Oracle是一种广泛使用的关系型数据库管理系统,其强大的功能和稳定性深受用户的喜爱。
在Oracle数据库中,清空表的语句是经常用到的操作。
它可以用于删除表中所有记录,以便重新填充数据或进行其他操作。
II.清空表的语句在Oracle数据库中,有三种清空表的语句:1.删除表中所有记录使用DELETE语句可以删除表中所有满足特定条件的记录。
例如:```sqlDELETE FROM table_name WHERE condition;```其中,`table_name`是表名,`condition`是删除记录的条件。
2.使用TRUNCATE TABLE语句TRUNCATE TABLE语句可以快速删除表中的所有记录,但无法回滚此操作。
例如:```sqlTRUNCATE TABLE table_name;```其中,`table_name`是表名。
3.使用DROP TABLE语句DROP TABLE语句可以删除整个表,包括表结构和相关数据。
例如:```sqlDROP TABLE table_name;```其中,`table_name`是表名。
III.注意事项在清空表时,需要注意以下几点:1.避免数据丢失清空表时,务必确保已经备份了重要数据,以防止数据丢失。
2.确保操作合法在进行清空表的操作时,请确保您具有合法的权限。
否则,可能会导致操作失败或数据泄露。
IV.结论总之,在Oracle数据库中,清空表的语句有多种方法,包括DELETE、TRUNCATE TABLE和DROP TABLE。
drop、delete与truncate的区别
drop、delete与truncate的区别DROP、DELETE 和 TRUNCATE 是数据库中用于删除数据或对象的三个不同的 SQL 命令,它们有一些重要的区别:DROP:DROP 用于删除数据库中的对象,可以是表、索引、视图、数据库等。
它会完全删除对象,包括对象本身以及对象中存储的所有数据。
使用DROP 命令要格外小心,因为它会永久性地删除数据库对象,且无法回滚。
DROP TABLE table_name;DELETE:DELETE 用于从表中删除记录,可以根据条件删除部分或全部记录。
DELETE 操作是事务安全的,可以回滚。
sqlCopy codeDELETE FROM table_name WHERE condition;DELETE 不会删除表本身,只是删除表中的数据行。
它的操作是逐行执行的,可以携带条件来选择性地删除记录。
TRUNCATE:TRUNCATE 用于删除表中的所有记录,但保留表的结构以及与表相关的索引、约束等,相当于清空表。
与 DELETE 不同,TRUNCATE 通常更快,因为它是一次性删除整个表中的数据。
sqlCopy codeTRUNCATE TABLE table_name;TRUNCATE 也是事务安全的,可以回滚。
但需要注意的是,TRUNCATE 不接受带有条件的删除,它总是删除整个表的数据。
总体而言,选择使用 DROP、DELETE 还是 TRUNCATE 取决于具体的需求和场景。
如果需要删除整个表并释放空间,可以使用DROP。
如果只是删除表中的一部分数据,可以使用DELETE。
如果需要快速清空表中的所有数据而保留表结构,可以使用TRUNCATE。
在使用这些命令时,务必小心谨慎,以免误操作导致数据丢失。
oracle与Mysql的增删改语法区别对比
oracle与Mysql的增删改语法区别对⽐1. 创建表MySQL:create table test(id int(10) not null primary key comment '主键id',amt decimal(18,2) default null comment '⾦额')comment='测试表';Oracle:create table t1(id varchar2(32) defaule 0 not null primary key,name varchar2(32) ,age varchar2(32))添加表注释:comment on table t1 is '个⼈信息';添加字段注释:comment on column t1.id is 'id';comment on column is '姓名';comment on column t1.age is '年龄';2. 删除表MySQL:drop table if exists tableName;Oracle:drop table tableName;注:Oracle没有if exists关键字,也没⽤类似if exists的SQL语法。
drop、truncate、delete的区别:1、drop (删除表):删除内容和定义,释放空间。
简单来说就是把整个表去掉.以后要新增数据是不可能的,除⾮新增⼀个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
2、truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。
与drop不同的是,只是清空表数据⽽已。
注意:truncate 不能删除⾏数据,要删就要把表清空。
Database Truncate和Delete的区别
T 20 3
DDL语句,另外DDL语句是隐式提交。所以truncate操作不能回滚,而delete操作却可以。
两种操作对比(首先新建一个表,并插入数据)
SQL>create table t (i number);
Table created.
SQL> insert into t values(10);
SQL> commit;
USER_TABLES.BLOCKS表示已经使用过的数据库块的数目(水线)。
Delete删除表
SQL> delete from t;
10000 rows deleted
SQL> commit;
Commit complete.
SQL>analyze table t estimate statistics;
#删除后回滚
SQL> rollback;
Rollback complete.
SQL> select * from t;
I
----------
10
Truncate截断表,然后回滚.
SQL> truncate table t;
Table truncated.
高水线的作用: HWM对数据库的操作有如下影响:
a)全表扫描通常要读出直到HWM标记的所有的属于该表数据库块,即使该表中没有任何
数据。
b)即使HWM以下有空闲的数据库块,键入在插入数据时使用了append关键字,则在插
oracle数据库删除数据Delete语句和Truncate语句的对比
当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。
一、delete语句(1)有条件删除语法格式:delete [from] table_name [where condition];如:删除users表中的userid为‘001’的数据:delete from users where userid='001';(2)无条件删除整个表数据语法格式:delete table_name;如:删除user表中的所有数据:delete users ;二、Truncate语句使用Truncate语句是删除表中的所有记录。
语法格式: Truncate [table] table_name;(1)删除所有记录不保留记录占用空间Truncate [table] table_name [drop storage];如:删除users表中的所有数据并不保存占用空间: Truncate table users drop storage; 由于默认使用drop storage关键字,所以可以省略 drop storage;(2)删除所有记录保留记录占用空间Truncate [table] table_name [reuse storage];如:删除users表中的所有数据并保存占用空间: Truncate table users reuse storage;三、两种删除语句的对比由于delete语句删除记录时候,记录是逐条删除的,而Truncate 语句删除数据时不产生回退信息;所以如果需要删除大量数据的时候使用delete则占用较多的系统资源,而如果使用Truncate 则会快的多。
下面通过实例说明一下:1、首先建立user表:create table users(userid varchar2(20) ,username varchar2(30),userpass varchar2(30));2、接着插入一条数据insert into users values('001','GavinDream','123456');3、使用复制插入方法插入几万条数据insert into users(userid,username,userpass) select * from users;我插入了 4194304条数据,使用delete删除花费时间为:90.964 seconds,然后又插入了二倍的数据,但使用truncate花费时间仅仅为2.215 seconds,。
Oracle 删除数据的几种方法
删除表(记录和结构)的语名delete ————truncate ———— drop DELETE (删除数据表里记录的语句)DELETE FROM表名WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用TRUNCATE 命令, 它可以释放占用的数据块表空间TRUNCATE TABLE 表名;此操作不可回退.相同点truncate和不带where子句的delete, 以及drop都会删除表内的数据注意:1.这里说的delete是指不带where子句的delete语句2.在存储过程中默认是不允许执行truncate table tablename操作的,所以要使用execute immediate 'truncate table tablename';例如:[sql]view plaincopyprint?1.CREATE OR REPLACE PROCEDURE proc_delete_all_data2.IS3.BEGIN4.execute immediate 'truncate table T_FLOW_ACCOUNT';5.execute immediate 'truncate table T_FLOW_MERCHANT';6.END proc_delete_all_data;不同点:1. truncate和delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到minextents个extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).4.速度,一般来说: drop>; truncate >; delete5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据oracle中删除表中的一列语句alter table 表名drop colum 列名。
TRUNCATE和Delete的区别
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
4、TRUNCATE不能触发任何Delete触发器。
5、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
6、不能清空父表。
在oracle里,使用delete删除数据以后,数据库的存储容量不会减少,而且使用delete删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。
建一个带有自增字段的表,加入100万数据
然后分别用TRUNCATE和DELETE删除全部数据
然后再向表里插入一条数据
最直观是:
1.TRUNCATE TABLE是非常快的
2.TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值
………………………………………………………………………………………………
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比Delete操作后的表要快得多。
truncate和delete的语法
truncate和delete的语法truncate和delete是数据库中常用的两种操作语法,用于删除表中的数据。
它们虽然都可以删除数据,但在使用上有一些区别。
首先,truncate是一种DDL(数据定义语言)操作,而delete是一种DML(数据操作语言)操作。
DDL操作是对数据库结构进行操作,而DML操作是对数据库中的数据进行操作。
因此,truncate操作会更快,因为它不会记录删除的每一行数据,而是直接删除整个表的数据。
而delete操作会逐行删除数据,并且会记录每一行被删除的数据,因此相对来说会慢一些。
其次,truncate操作是一个原子操作,即要么执行成功,要么执行失败,不会有部分成功的情况。
而delete操作可以根据条件删除数据,可以选择性地删除满足条件的数据,因此可以更加灵活。
在语法上,truncate和delete的使用方式也有所不同。
下面分别介绍它们的语法。
truncate语法如下:```TRUNCATE TABLE table_name;```其中,table_name是要删除数据的表名。
执行这条语句后,表中的所有数据都会被删除,但表的结构仍然保留。
delete语法如下:```DELETE FROM table_name WHERE condition;```其中,table_name是要删除数据的表名,condition是删除数据的条件。
通过设置条件,可以选择性地删除满足条件的数据。
如果不设置条件,则会删除表中的所有数据。
需要注意的是,使用delete语句删除数据时,要谨慎使用不带条件的delete语句,因为这样会删除整个表中的所有数据,可能会导致数据的丢失。
总结起来,truncate和delete是数据库中常用的删除数据的操作语法。
它们在使用上有一些区别,truncate是DDL操作,删除整个表的数据,速度快,是一个原子操作;而delete是DML操作,可以选择性地删除满足条件的数据,速度相对较慢。
oracle里删除临时表语句
在使用Oracle数据库时,经常会遇到删除临时表的情况。
临时表是一种特殊的数据库对象,通常用于在会话级别保存临时数据。
使用临时表可以有效地管理临时数据,提高数据库的性能和效率。
在Oracle数据库中,删除临时表的语句可以通过以下几种方式实现:1. 使用DROP TABLE语句删除临时表DROP TABLE 临时表名;使用DROP TABLE语句可以直接删除临时表,但需要谨慎使用,因为一旦执行该语句,临时表及其数据将被永久删除,不可恢复。
在执行DROP TABLE语句之前,务必确认是否需要删除该临时表。
2. 使用TRUNCATE TABLE语句清空临时表数据TRUNCATE TABLE 临时表名;TRUNCATE TABLE语句用于清空表中的数据,但保留表的结构及其定义。
与DROP TABLE不同,TRUNCATE TABLE仅删除表中的数据,而不删除表本身。
在删除临时表数据时,可以使用TRUNCATE TABLE 语句保留表的定义及结构,以便后续重新使用。
3. 使用DELETE FROM语句删除临时表数据DELETE FROM 临时表名;DELETE FROM语句用于删除表中的数据,但不会删除表的结构。
通过使用DELETE FROM语句,可以逐行地删除临时表中的数据,但保留表的结构不变。
无论是使用DROP TABLE、TRUNCATE TABLE还是DELETE FROM语句删除临时表,都需要在实际操作前进行充分的确认和备份工作,以避免因操作失误导致不可逆的数据丢失。
在进行删除临时表的操作时,还需要注意以下几点:1. 确认临时表是否仍在使用中在删除临时表之前,需要确认该临时表是否仍在当前会话或其他会话中使用。
如果临时表仍在使用中,需要先断开与临时表的关联,再执行删除操作。
2. 备份临时表数据在执行删除操作之前,应该对临时表的数据进行备份。
即使是临时表,也可能含有重要的临时数据,一旦删除不可恢复,可能会给业务或应用程序带来不必要的损失。
[转]sql删除表数据的drop、truncate和delete用法
[转]sql删除表数据的drop、truncate和delete⽤法删除表数据的关键字,⼤家记得最多的可能就是delete。
然⽽,我们做数据库开发,读取数据库数据.对另外的drop、truncate⽤得就⽐较少了。
1 drop出没场合:drop table table_name绝招:删除内容和定义,释放空间。
简单来说就是把整个表去掉.以后要新增数据是不可能的,除⾮新增⼀个表,例如:⼀个班就是⼀个表,学⽣就是表中的数据,学⽣的职务就是定义drop table class,就是把整个班移除.学⽣和职务都消失⽐如下⾯School数据库中有两张表[Classes]表和[Teacher]表当执⾏下⾯代码之后Classes表就被清楚,⼀⼲⼆净! 删除得⾮常暴⼒,作为⽼⼤实⾄名归2. truncate出没场合:truncate table table_name绝招:删除内容、释放空间但不删除定义。
与drop不同的是,他只是清空表数据⽽已,他⽐较温柔.同样也是⼀个班,他只去除所有的学⽣.班还在,职务还在,如果有新增的学⽣可以进去,也可以分配上职务删除内容很容易理解,不删除定义也很容易理解,就是保留表的数据结构上图就表现了:删除内容执⾏语句之后,发现数据表的结构还在,也就是不删除定义⾄于释放空间,看下下⾯两幅图.你们就会明⽩的右图:Id列标识列,因之前delete过⾏数据,所以会出现标识列不连续(体现了delete删除是不释放空间的)经过truncate table Teacher 之后再新增三条数据右图:同样Id是标识列,发现插⼊数据的时候,标识列连续了(体现了truncate删除是释放空间)注意:truncate 不能删除⾏数据,要删就要把表清空3. delete出没场合:delete table table_name --虽然也是删除整个表的数据,但是过程是痛苦的(系统⼀⾏⼀⾏地删,效率较truncate低)或delete table table_name where 条件绝招:删除内容不删除定义,不释放空间。
Oracle删除表数据命令
Oracle删除表数据命令drop命令
drop table 表名;
例如:删除商品表
drop table commodity;
注意:
1、⽤drop删除表数据,不但会删除表中的数据,连表结构也被删除了
truncate命令
truncate table 表名;
例如:删除商品表
truncate table commodity;
注意:
1、⽤truncate删除表数据,只是删除表中的数据,表结构不会被删除!
2、删除整个表的数据时,过程是系统⼀次性删除数据,效率⽐较⾼
3、truncate删除释放空间
delete命令
delete 表名;
例如:删除商品表
delete commodity;
注意:
1、⽤delete删除表数据,只是删除表中的数据,表结构不会被删除!
2、虽然也是删除整个表的数据,但是过程是系统⼀⾏⼀⾏地删,效率⽐truncate低
3、delete删除是不释放空间的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle delete truncate drop 的区别收藏
1. delete/truncate 只删除数据不删除表,索引的结构。
drop 将删除表的结构及依赖的index/constrain/trigger,依赖于该表的 procedure/function 将保留,但是变为 invalid 状态;
2. delete 是 dml,写 rollback segement,可回滚,速度慢,事务提交之后才生效。
在 9i 满足 undo_retention 条件下可使用 flashback。
一次性大批量数据的 delete 可能导致回滚段急剧扩展从而影响到数据库,慎用,触发 trigger。
truncate/drop 是 ddl,隐式提交,不写 rollback segment,不能回滚,速度快。
9i 不能使用 flashback,不触发 trigger;
3. delete 不影响表所占用的 extent,HWM 保持原位置不动,即使删除的是最靠近 HWM 的数据。
delete 其实也可以释放空间,但是不降低 HWM,delete 后 block 的空闲空间达到pct_used,就可以重用。
truncate 缺省情况下将空间(表和索引)释放到 minextents 个extent,除非使用 reuse storage。
truncate 会将高水线复位(回到最开始)。
drop 将表所占用的空间全部释放,segment 不存在,无所谓 HWM 的概念;
Oracle 高水位(HWM)
/tianlesoftware/archive/2009/10/22/4707900.aspx
4. truncate/drop 的对象必须是本模式下的,或者被授予 drop any table 的权限,但 drop any table 权限不能 truncate/drop sys 的表。
delete 的对象必须是本模式下的,或者被授予 delete on SCHEMA.table 或 delete any table 的权限,但 delete any table 权限不能 delete sys 的表;
5. 不能 truncate 一个带有 enable 外键的表,不管表里有没有数据,如果要 truncate,首先要 disable 外键或者删除外键(drop 外键的表肯定是删除了外键)。
不能 drop 一个带有 enable 外键的表,不管表里有没有数据,如果要 drop,首先要删除外键,或者直接用 drop table TABLE_NAME cascade constraints; 级联删除外键。
delete 可以。