首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么truncate是DDL语句?

为什么truncate是DDL语句?
EN

Stack Overflow用户
提问于 2014-09-26 20:42:09
回答 2查看 14.8K关注 0票数 17

在truncate语句之后,表结构保持不变,并且只有记录被删除(使用自动提交)。那么truncate是DDL语句的原因是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-26 23:57:36

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

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

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

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

它也不能是DML,对吧?无法指定Where子句或随DDL语句一起使用。如果truncate是DML语句,那么Oracle将允许我们将truncate与where子句一起使用。

注: SQL中的WHERE子句指定SQL数据操作语言(DML)语句应仅影响满足指定标准的行。

票数 9
EN

Stack Overflow用户

发布于 2014-09-26 20:45:33

TRUNCATE重置了表的高水位线,有效地消除了以前存在的所有行。将它作为DDL语句处理可以让它超快,因为它允许它在不保留撤消(回滚)信息的情况下工作,就像DML语句一样。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26059855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档