Delete与trucate都用来删除表中的数据,那它们有什么不同之处呢?我先概要的将它们的不同之处说出,然后用测试依次来证实我所说的不同之处。
(1) delete是DML操作,需要生undo成数据,在没有commit前可以回滚。truncate是DDL操作,不需要生成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/