博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL中drop,delete和truncate分析
阅读量:6302 次
发布时间:2019-06-22

本文共 819 字,大约阅读时间需要 2 分钟。

hot3.png

不同点:

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.速度,一般来说: drop> truncate > delete

5.安全性:小心使用 drop 和 truncate,尤其没有备份的时候.否则哭都来不及

       使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.
       想删除表,当然用 drop
       想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
       如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

相同点:

truncate 和不带 where 子句的 delete,以及 drop 都会删除表内的数据

转载于:https://my.oschina.net/u/1462678/blog/232725

你可能感兴趣的文章
sonResult
查看>>
不找C++的工作也要学C++
查看>>
Java 多线程系列
查看>>
装饰者模式
查看>>
AngularDart Material Design 对话框
查看>>
js数组 es6
查看>>
深入浅出分布式存储的设计与优化之道
查看>>
PageHelper的使用
查看>>
【高级数据类型】- 4.字典类型
查看>>
Myeclipse操作
查看>>
TextView动态设置图片
查看>>
Linux常用命令
查看>>
【83行代码获奖代码】高中生@青藤木子 耗费一周给妈妈编写了一款语音识别APP...
查看>>
安装PHP5、安装PHP7
查看>>
QuickBI助你成为分析师——搞定数据源
查看>>
关于vue路由跳转页面带参数方法总结
查看>>
推荐一个以动画效果显示github提交记录的黑科技工具:Gource
查看>>
数组的遍历及数组的去重
查看>>
轻量级内存计算引擎
查看>>
利用Rancher1.6部署K8s测试环境、开发环境
查看>>