【oracle_sql】drop、truncat和edelete的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/debimeng/article/details/84748056

drop、truncat和edelete的区别

内容和范围:
drop           删除整个表(包括结构和数据)
truncate     只删除数据,只能对表操作并且只能删除整张表的数据,不可使用where条件;
                  且对于外键(foreignkey )约束引用的表,不能使用 truncate table
delete        只删除数据,可以删除table和view并且可以删除部分数据,因其可以使用where条件

空间:
drop           会将表所占用的空间释放
truncate     会表和索引所占用的空间会恢复到初始化大小
delete        不会减少表和索引的空间,高水线(high watermark)保持原位置不变(这就是为什么有时候一张没有数据的空表所占用的空间仍然很大的原因)

效率:
快到慢一般为drop > truncate > delete,delete因为需要写日志会比较慢

语言和回滚:
drop和truncate为DDL语句,会隐式自动提交,即操作立即生效,且原数据不放到rollback segment中,不能回滚,不会触发触发器
delete是DML语句,需要手动提交才会永久保存,原数据放到rollback segment中,可以回滚。

猜你喜欢

转载自blog.csdn.net/debimeng/article/details/84748056