为啥 alter 命令称为 DDL 而不是 DML?

Posted

技术标签:

【中文标题】为啥 alter 命令称为 DDL 而不是 DML?【英文标题】:Why alter command is referred as DDL and not DML?为什么 alter 命令称为 DDL 而不是 DML? 【发布时间】:2016-05-10 20:45:54 【问题描述】:

我在查看 SQL 中的不同命令时遇到了 alter 命令,它被称为 DDL(数据定义语言)。我们可以改变列和其中的值,所以我们可以用这个命令来操作数据,为什么alter命令不被称为DML(数据操作语言)。

我已经用谷歌搜索了,但我找不到一些好的解释,所以请帮助我。

【问题讨论】:

一个ALTER TABLE改变了一个表的结构,因此它是DDL 【参考方案1】:

ALTER 命令可以是 DDL 和 DML。就像大多数对此做出回应的人一样,我过去就知道 ALTER 是 DDL。但是,在 mysql 5.7.x 中,您会看到在使用 mysqld --initialize --console 初始化数据库后不久,就会创建默认的 root 用户帐户和相应的密码。您可以使用这个新创建的 root 用户帐户访问您的数据库,但在登录后您绝对无能为力。此阶段唯一允许的 SQL 语句是 ALTER 语句。这用于更改初始化期间生成的默认密码。语法是 ALTER USER 'root'@'localhost' IDENTITIED BY 'new_password'; 。这是数据库接受的唯一语句。这会修改/更新/操作用户表中的数据(密码)。对此我得出结论,ALTER语句既可以是DDL也可以是DML

【讨论】:

【参考方案2】:

DDL - 改变 模式

这包括创建表、重命名列、删除视图等。此类语句是 DDL,即使作为过程的一部分可能会创建(默认值)、更改(通过转换)甚至丢失(删除列)数据。基本上,任何CREATE/DROP/ALTER 命令都是DDL。

DML - 改变架构中的信息/数据没有更新架构。

这包括DELETEUPDATE 语句。

有时必须同时使用 DDL 和 DML 才能正确迁移架构;但它们是两种不同类别的 SQL 命令,并且 DML 不会导致架构发生变化。

【讨论】:

这应该是答案,因为其他人只是在说 OP 已经知道的内容; DDL 用于定义结构,DML 用于操作数据。他的例子是关于 DDL 操纵数据的,这是唯一一个在 DDL 的能力中包含操纵数据的解释......【参考方案3】:

“数据”是用户通过 DDL 定义的表中的数据。 “元数据”是由 DBMS 预定义的表中的数据,用于描述表(它们本身和用户定义的表)。因此,DML 操作用户表中的数据或(通常仅)读取系统表中的元数据,而 DDL 定义(CREATE、ALTER、DROP)用户表并作为副作用更新系统表中的元数据。

【讨论】:

【参考方案4】:

原因 ALTER 命令没有处理数据。它用于更改o列或表或其他DB对象的定义。

看 http://www.w3schools.com/sql/sql_alter.asp

【讨论】:

【参考方案5】:

ALTER 命令用于改变数据库的结构。这就是 DDL 所做的,即 DDL 语句用于定义数据库结构或架构。

而 DML 语句用于管理模式对象中的数据。

【讨论】:

以上是关于为啥 alter 命令称为 DDL 而不是 DML?的主要内容,如果未能解决你的问题,请参考以下文章

DDL与DML问题

oracle DDL,DML,DCL, 基础概念详解

什么是DQL,DML,DDL,DCL

SQL: DDL, DML,表定义与含义

MySQL中的DDL,DML

DDL,DML和DCL的区别与理解?