Delete 如何既是 DDL 又是 DML 语句

Posted

技术标签:

【中文标题】Delete 如何既是 DDL 又是 DML 语句【英文标题】:How can Delete be both a DDL and a DML statement 【发布时间】:2017-07-21 01:32:21 【问题描述】:

我目前正在阅读 Microsoft 的官方书籍“数据库管理基础”以准备参加考试。

我了解 DDL 和 DML 是什么,但 Microsoft 将 DELETE 显示为 DDL 和 DML 语句。我已经用谷歌搜索了这个,但我无法确认或否认这一点。

一个很好的参考是这个问题:What is DDL and DML 它显示为 DML。以下是书中的片段:

数据操作语言 (DML) 是允许 您可以使用核心语句 INSERT、UPDATE、DELETE 和 MERGE 来 操作任何 SQL Server 表中的数据。核心 DML 语句包括 如下: • SELECT:从数据库中检索行并启用 从一个或多个表中选择一个或多个行或列 在 SQL Server 中。 • INSERT:将一个或多个新行添加到一个表或一个 在 SQL Server 中查看。 • 更新:更改一项或多项现有数据 表或视图中的列。 • DELETE:从表中删除行或 看法。 • MERGE:对一个对象执行插入、更新或删除操作 目标表基于与源表连接的结果。

六个主要的 DDL 语句如下: • USE:更改 数据库上下文。 • CREATE:创建 SQL Server 数据库对象 (表、视图或存储过程)。 • ALTER:更改现有的 目的。 • DROP:从数据库中删除一个对象。 • 截断: 从表中删除行并释放这些行使用的空间。 • DELETE:从表中删除行但不释放所使用的空间 这些行已删除。

这本书是否过时/错误。有人可以帮助阐明这一点吗?我看到完整的 DDL 和 DML 语句的列表相互矛盾。

【问题讨论】:

另一位书评人发现了同样的错误:amazon.com/gp/customer-reviews/RZD90UK9RSVLH 只是为了确认,我参加了考试(并通过了)删除和截断,当然还有 DML。删除表结构 DROP 使用,DROP 是 DDL 【参考方案1】:

我同意你的看法,DELETE 是 DML。此外,我敢说,TRUNCATE 也应该被视为 DML,因为逻辑上等同于 DELETE 语句。在我看来,TRUNCATEDROPCREATE 的事实不足以证明将其分配给 DDL 是合理的,因为两者一起作为一个原子操作执行,不会影响数据库的架构。

【讨论】:

祝你考试顺利! 请注意,SQL 标准将 TRUNCATE 归类为 DML 语句 @a_horse_with_no_name 你确定你没有打错吗?我正在查看的每个资源都将 TRUNCATE 归类为 DDL 语句。 是的,我确定。它与 UPDATE、DELETE 和 INSERT 语句一起列在“数据操作”一章中。 DDL 语句在“模式定义和操作”一章中定义 @a_horse_with_no_name 好吧,很高兴知道我并不孤单……谢谢!

以上是关于Delete 如何既是 DDL 又是 DML 语句的主要内容,如果未能解决你的问题,请参考以下文章

数据库DDL与DML对应含义

SQL语言中add,alter,drop和insert,update,delete的区别?

数据库DML和DDL的学习

oracle中delete,truncate 和 drop的区别

深入浅出MySQL-DDL语句

数据库DDL与DML指的什么?