为什么要截断DDL语句?

时间:2014-09-26 12:42:09

标签: sql oracle ddl

截断语句后表结构保持不变,只删除记录(使用自动提交)。那么truncate是DDL语句的原因是什么?

3 个答案:

答案 0 :(得分:8)

我在这里添加一些解释:  默认情况下,截断表时,您不仅要删除行,还要隐含地告诉Oracle数据库还要执行以下任务:

除了MINEXTENTS存储参数

指定的行之外,释放已删除行使用的所有空间

将NEXT存储参数设置为截断过程从段中删除的最后一个范围的大小

因此,它通过重置水高标记来更改存储定义并更改表的结构。

它也不能成为DML,对吧? Where子句不能被指定或与DDL语句一起出现。如果truncate是DML语句,则Oracle允许我们将truncate与where子句一起使用 注意:SQL中的WHERE子句指定SQL数据操作语言(DML)语句应仅影响满足指定条件的行。

答案 1 :(得分:7)

TRUNCATE重置表格的高水位线,有效地消除了之前存在的所有行。将其作为DDL语句处理允许它超快,因为它允许它在不保留DML语句之类的撤销(回滚)信息的情况下运行。

答案 2 :(得分:4)

一个简单的实际解释可以是:

截断通过更改数据定义来重新初始化身份,因此它是 DDL ,而删除只删除表中的记录,并且不会对其定义进行任何更改。为什么它是 DML

比如创建表名称并插入一些初始记录。

Created table Inserted Some Records

删除所有记录(没有where子句)并再次插入记录。 身份不会重新初始化。

Delete All Records and insert again

现在截断表并重新插入记录。

Truncate table and reinsert records