版权声明:本文为博主原创文章,未经博主允许不得转载。 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中,可以回滚。