深入解析delete和truncate不同之处

Deletetrucate都用来删除表中的数据,那它们有什么不同之处呢?我先概要的将它们的不同之处说出,然后用测试依次来证实我所说的不同之处。

(1)     deleteDML操作,需要生undo成数据,在没有commit前可以回滚。truncateDDL操作,不需要生成undo数据,也无法回滚。

(2)      delte操作并不降低水位线hwm,也就是无法释放被删除记录所占用的块空间,undo相反,降低hwm,释放被删除记录所占用的表空间。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。

(3)      detele的执行速度要远远低于truncate,就像要求你把一本书扔掉,detele操作是一页一页撕下来,而truncate则是把整本书直接扔到垃圾桶,造成它们速度差距的根本原因除了有无undo数据的生成之外,和它们在块上的实现操作有关,而如何有关,我也是尚不清楚。

(4)      TRUNCATE不能触发任何DELETE触发器

(5)      不能授予任何人清空他人的表的权限

(6)       不能清空父表
http://space.itpub.net/27425054/viewspace-749401

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26308209/viewspace-749796/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26308209/viewspace-749796/

你可能感兴趣的:(深入解析delete和truncate不同之处)