一:区别

1.delete from 后面可以直接接条件,truncate不可以

2.delete from 记录是一条条删除的,所删除的每行记录都会进入日志,而truncate一次性删除整个页,因此日至里面只记录页释放,简言之,

delete from 更新日志,trancate基本不,所用的空间日志较少。

3.delete from 删空表格后,会保留一个空的页,而truncate在表中不会留有任何页。

4.当使用行锁执行DELETE语句时,当锁定表中各行以便删除,truncate始终锁定表和页,而不是锁定各行。

5.如果有identity产生的自增id列,delete from 删除后任然从上次的数开始增加,即种子不变,而truncate删除后,种子会恢复初始。

6.truncate不会触发delete的触发器,而truncate删除不会记录各个行删除。

二.truncate与drop,delete的对比

上面说过truncate与delete,drop很相似,其实这三者还是与很大的不同的,下面简单对比下三者的异同。

  • truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
  • truncate只能作用于表;delete,drop可作用于表、视图等。
  • truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
  • truncate会重置表的自增值;delete不会。
  • truncate不会激活与表有关的删除触发器;delete可以。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

二:总结

1.truncate和delete只删除数据不删除表的结构(定义);

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index),依赖于该表的存储过程/函数将保留,

但是变为invalid状态。

2.delete语句时dml,这个操作会放到rollback segement中,事务提交后才生效,如果有相应的trigger,执行的时候将被触发

truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
 
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动   
 
   显然drop语句将表所占用的空间全部释放    
 
   truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始)。
 
4.s速度一般来说,drop>truncate>delete.
 
5.安全性:小心使用drop和truncate,尤其在没有备份的时候,删除后否则哭都来不及。
 
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.  
 
想删除表,当然用drop  ,想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete
 
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
 

最新文章

  1. iOS生成静态库方法
  2. memcached tomcat maven 学习记录
  3. Unity3D使用经验总结 缺点篇
  4. 用Jenkins+Gradle+Jetty实现持续集成、测试、部署
  5. Android之TelephonyManager类的使用案例
  6. Network Link Conditioner模拟不同网络环境
  7. 线程间同步之 semaphore(信号量)
  8. eclipse 中修改 M2_REPO的值
  9. url地址传参中文乱码处理
  10. 数据库管理——Powershell——使用Powershell脚本找出消耗最多磁盘空间的文件
  11. poj3270 && poj 1026(置换问题)
  12. socketserver模块TCP和UDP协议形式
  13. 如何快速扫描C段(网站快照、后台识别/登录、目录扫描)
  14. LOJ2255. 「SNOI2017」炸弹 (线段树)
  15. layer 弹出层
  16. python中lambda的用法
  17. Java 中位移运算符 >>,>>>,<<
  18. Git 创建两个“本地分支”协同工作
  19. Python 实现双向链表(图解)
  20. php文件上传代码解析

热门文章

  1. 聊聊dubbo协议
  2. [硬拆解]拆解一个USB转CAN-FD总线设备-PCAN-USB FD
  3. Google插件开发探索
  4. 开源办公套件DzzOffice安装教程
  5. MySQL基本使用(开机自启动-环境变量-忘记密码-统一编码)
  6. python03day
  7. 被mybatis一级缓存坑了
  8. Linux 配置 mycat 和 分库分表配置。
  9. 第09讲:Flink 状态与容错
  10. 资本主义反抗指南精要(v0.1)