小智 8
我在这里添加一些解释:默认情况下,截断表时,您不仅仅是删除行,而是隐含地告诉Oracle数据库还执行以下任务:
除了MINEXTENTS存储参数指定的行之外,释放已删除行使用的所有空间
将NEXT存储参数设置为截断过程从段中删除的最后一个范围的大小
因此,它通过重置水高标记来更改存储定义并更改表的结构.
它也不能是DML,对吗?Where子句不能指定或附带DDL语句.如果truncate是DML语句,则Oracle允许我们将truncate与where子句一起使用.
注意:SQL中的WHERE子句指定SQL数据操作语言(DML)语句应仅影响满足指定条件的行.
一个简单实用的解释可以是:
截断通过更改数据定义来重新初始化身份,因此它是DDL,而 Delete 仅从表中删除记录,并且不会对其定义进行任何更改,这就是为什么它是DML。
比如创建一个表名并插入一些初始记录。
删除所有记录(没有 where 子句)并再次插入记录。身份不会重新初始化。
现在截断表并重新插入记录。