一道面试题目8 delete与truncate的区别

来源:互联网 发布:网络绪论 编辑:程序博客网 时间:2024/06/05 20:27

delete:  
  1.DML语句  
  2.可以选择性的删除记录,效率相对truncate要低  
  3.如果没有commit;记录可回滚,删除失效。  
  truncate:  
  1.DDL语句  
  2.一次性删除表中全部记录,效率较高  
  3.删除后不可回滚(自动commit) 
========================================
delete  
      使用时系统要为你的条件选出的数据分配回滚段,以便在适当的时候不提交事务而回滚.  
      删除速度较慢,  
       
  truncate  
      使用时系统不分配回滚段,执行后将不能回滚.  
      删除快.,效率高.  
  删除表中的部分数据时用delete.如果删除表中的全部的话都可以用,但推荐用后者.
===========================================

truncate可以快速清空表,释放空间,但不能回滚;  
  delete删除指定条件记录并可回滚

====================================================
详细解说:
TRUNCATE和DELETE有以下几点区别
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能触发任何DELETE触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。



DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE  TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。