truncate和delete的区别
删除表中数据的方法有delete和truncate,delete可以删除整个表的数据,也可以删除满足条件的一条或多条数据,但truncate只能删除整张表的数据.一般将delete操作称作删除表,truncate操作称作截断表.
对比操作如下:
操作 回滚 高水线 空间 效率
truncate 不能 降低 回收 快
delete 能 不变 不回收 慢
1.回滚
在oracle中删除的数据可以回滚是因为它把原始数据放到了undo表空间
DML语句使用undo表空间,DDL语句不使用undo,delete属于DML语句,而truncate属于DDL语句,另外DDL语句是隐式提交.
2.高水线
所有oracle都有一个容纳数据的上限,称之为high water mark(HWM),HWM通常增长幅度为5个数据块.
delete语句不影响表所占用的数据块,高水线保持原位置不动;truncate语句缺省情况下释放空间,除非使用reuse storage; truncate会将高水线复位.