oracle之truncate && delete

参考资料

实例对比Oracle中truncate和delete的区别

http://chenxy.blog.51cto.com/729966/168459

http://www.cnblogs.com/guodapeng/archive/2008/05/19/1202528.html

http://superman-chenzs.itpub.net/post/29327/272469

注意事项

1.在oracle中数据删除后还能回滚是因为它把原始数据放到了undo表空间,

2.DML语句使用undo表空间,DDL语句不使用undo,而delete是DML语句,truncate是DDL语句,别外DDL语句是隐式提交.所以truncate操用不能回滚,而delete操作可以

truncate与delete相同点:

1在oracle中删除表中的数据的方法有delete,truncate

2它们都是删除表中的数据,而不能删除表结构.

truncate与delete之间的区别

1delete可删除整个表的数据也可删除表中某一条或N条满足条件的数据,删除的数据可恢复.命令完成就可回滾.

2truncate只能删除整个表的数据,自動提交的.命令完成不可回滾.truncate的速度也比delete要快得多,truncate之后,TABLE的HWM退回到INITIAL和NEXT的位置(默认)delete则不可以.

4truncate只能对TABLE,delete可以是table,view,synonym

5TRUNCATETABLE的对象必须是本模式下的,或者有dropanytable的权限而DELETE则是对象必须是本模式下的,或被授予DELETEONSCHEMA.TABLE或DELETEANYTABLE的权限.

一truncate

用法:
truncate table T;

二delete

用法:
delete T

另外在加上一个重要区别

delete在plsql中是可执行的,但是truncate在plsql中不能执行,只能用动态sql执行,如下:

execute immediate 'truncate table  表名';

相关推荐