原标题:Oracle数据库知识点分享:truncate和delete区别

岳彩波,擅长Oracle、Mysql,有丰富的数据库维护、调优经验,曾服务于金融行业,目前专注于第三方支付领域。

一、知识点简介

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的空表不会分配空间。