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 表名';