Truncate和delete在实际应用中都是使用比较频繁的,他们都是删除表数据的语句,在这里我们整理一下两者之间的区别,以方便大家在应用中选择。
1、 语句类型
Truncate属于SQL DDL语言。
Delete属于SQL DML语言。
2、 commit
truncate执行完成自动提交。
Delete执行完成需要手工提交。
3、 回滚
Truncate不能rollback。
Delete可以rollback。
4、 存储空间
Truncate可以释放存储空间。
Delete不能释放存储空间。
5、 高水位
Truncate执行完毕降低高水位。
Delete不能降低高水位。
6、 日志的产生
Truncate执行过程中产生很少的日志。
Delete执行过程中会产生大量的日志。
7、 回退
Truncate执行的时候很少的回退。
Delete执行的时候会有大量的回退。
8、 是否可以加条件
Truncate不能加条件删除数据。
Delete可以加条件删除。
9、 级联删除
不能truncate一个带有enable外键的表,会报错ORA-02266。
可以delete一个带有enable外键的表。
10、 初始大小
Truncate保留建表的初始大小。
Delete保留表的现有大小。
以上的十条总结是根据官方文档和平时使用过程中的一些经验总结。
官方文档
Truncate table table_name;和delete table_name;
这两个语句在使用的时候要根据具体的需求来定;
delete也可以释放少量空间,但是不能降低高水位,上边第四项中释放和不释放空间都是相对来说的。
在这里还有一个相关的小知识点,默认情况下oracle10G的空表会分配存储空间,oracle11G的空表不会分配空间。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞9
添加新评论1 条评论
2017-08-01 12:26