ITPub博客

首页 > Linux操作系统 > Linux操作系统 > (转)drop truncate delete的区别

(转)drop truncate delete的区别

原创 Linux操作系统 作者:JackolWu 时间:2010-11-18 11:24:14 0 删除 编辑
相同之处:
1.truncate和不带where子句的delete、以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
 
不同之处:
1.drop和delete只是删除表的数据(定义),drop语句将删除表的结构、被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。
2.delete语句是DML语言,这个操作会放在rollback segement中,事物提交后才生效;如果有相应的触发器(trigger),执行的时候将被触发。truncate、drop是DDL语言,操作后即生效,原数据不会放到rollback中,不能回滚,操作不会触发trigger。
3.delete语句不影响表所占用的extent、高水线(high watermark)保持原位置不动。drop语句将表所占用的空间全部释放。truncate语句缺省情况下将空间释放到minextents的extent,除非使用reuse storage。truncate会将高水线复位(回到最初)。
4.效率方面:drop > truncate > delete
5.安全性:小心使用drop与truncate,尤其是在没有备份的时候,想删除部分数据可使用delete需要带上where子句,回滚段要足够大,想删除表可以用drop,想保留表只是想删除表的所有数据、如果跟事物无关可以使用truncate,如果和事物有关、又或者想触发trigger,还是用delete,如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入、插入数据。
6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

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

请登录后发表评论 登录
全部评论

注册时间:2010-03-10

  • 博文量
    19
  • 访问量
    27829