日期:2014-05-16  浏览次数:20524 次

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会将高水线复位.