详解Oracle DELETE和TRUNCATE 的区别

如题所述

Oracle中truncate和delete的区别如下:
1、delete from后面可以写条件,truncate不可以。
2、delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
3、delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
4、当使用行锁执行DELETE语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
5、如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
6、truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。

总结:
1、truncate和delete只删除数据不删除表的结构(定义)。
2、delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发。
truncate是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
4、速度,一般来说: truncate > delete。
5、安全性:小心使用truncate,尤其没有备份的时候。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-02
从别处摘的。

1. DELETE
 ・DML语言
 ・可以回退
 ・可以有条件的删除

DELETE FROM 表名
  WHERE 条件

2.TRUNCATE TABLE
 ・DDL语言
 ・无法回退
 ・默认所有的表内容都删除
 ・删除速度比delete快。

TRUNCATE TABLE 表名本回答被提问者和网友采纳
第2个回答  2014-12-02
delete 删的慢 写大量日志
truncate 删的快 写少量日志
SQL> select count(*) from test;

COUNT(*)
----------
2783488

Elapsed: 00:00:00.22
SQL> select count(*) from test1;

COUNT(*)
----------
2783488

Elapsed: 00:00:00.34
SQL> select object_name,object_id,data_object_id from dba_objects where object_name in ('TEST','TEST1');

OBJECT_NAM OBJECT_ID DATA_OBJECT_ID
---------- ---------- --------------
TEST1 88856 88856
TEST 88851 88851

Elapsed: 00:00:00.01
SQL> delete from test;

2783488 rows deleted.

Elapsed: 00:03:04.93

SQL> truncate table test1;

Table truncated.

Elapsed: 00:00:02.03
SQL> select object_name,object_id,data_object_id from dba_objects where object_name in ('TEST','TEST1');

OBJECT_NAM OBJECT_ID DATA_OBJECT_ID
---------- ---------- --------------
TEST1 88856 88857
TEST 88851 88851

Elapsed: 00:00:00.14
第3个回答  2014-12-02
这个比较简单了,有很多地方不同,百度上一搜一堆。
大概说下
1、DELETE是逐行删除,所以在删除大量数据的时候速度慢,影响数据库效率;
TRUNCATE的话,是整表删掉(专业术语叫截短,截断),删除大量数据的时候有优势,不影响数据库运行效率。
2、DELETE触发行级触发器,T则不触发行级的触发器。
3、DELETE会做日志什么的bulabula之类的,这样可以在必要的时候回滚。T则没这么多规则,T了之后找不回来。
相似回答