为什么truncate是DDL语句?

问题描述 投票:0回答:4

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

sql oracle ddl
4个回答
11
投票

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

释放已删除行使用的所有空间(MINEXTENTS 存储参数指定的空间除外)

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

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

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


11
投票

TRUNCATE
重置表的高水位线,有效消除所有先前存在的行。将其视为 DDL 语句使其速度超快,因为它无需像 DML 语句那样保留撤消(回滚)信息即可运行。


9
投票

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

截断通过更改数据定义来重新初始化标识,因此它是DDL,而删除仅从表中删除记录,并且不会对其定义进行任何更改,因此它是DML

类似于创建表名称并插入一些初始记录。

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

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


0
投票
TRUNCATE TABLE 作为 DROP TABLE 和 CREATE TABLE 语句的组合工作,这不是一个“秘密”。 删除表 (DDL) + 创建表 (DDL) -> 截断表 (DDL)

是的,它删除了数据,但这只是 DROP TABLE 的结果。

根本没有 DML。
这个答案看起来更简单也很明显,所以我认为它应该在这里。

© www.soinside.com 2019 - 2024. All rights reserved.