【问题标题】:Truncate a DDL or DML command截断 DDL 或 DML 命令
【发布时间】:2018-09-11 02:38:52
【问题描述】:

我一直都知道 TRUNCATE 是一个 DDL 命令,但 Microsoft 文档让我感到困惑。

This 链接表示 TRUNCATE 是 DDL 命令,this 表示 TRUNCATE 是 DML 命令

另外,不同数据库中对 DDL 和 DML 的澄清是否不同?前任。 Oracle、MySql 等

【问题讨论】:

标签: sql-server ddl truncate


【解决方案1】:

就个人而言,我会说TRUNCATE 是一个DML 命令;您正在使用它来操作数据,而不是更改定义。

文档中有一些冲突的地方,主要是因为 e 比其他文档更老。他们甚至无法确定CASE 是语句还是表达式。

【讨论】:

    【解决方案2】:

    维基百科说 TRUNCATE 是 DML:

    在 SQL 中,TRUNCATE TABLE 语句是一种数据操作语言 (DML) 操作,标记表的范围以进行释放 (空置可重复使用)。此操作的结果很快删除了所有 表中的数据,通常绕过一些完整性强制 机制。在 SQL:2008 标准中正式引入。

    https://en.wikipedia.org/wiki/Truncate_(SQL)

    【讨论】:

      【解决方案3】:

      嗯,Microsoft 文档中描述的 TRUNCATE TABLE 类似于 DELETE(他们自己承认)。并且 DELETE 是 DML,因此,TRUNCATE TABLE 也应该是 DML。

      也许写第一篇文章的人把它放在那里是个错误。或者,也许他/她想指出,在使用该命令时要像在 DDL 中一样谨慎使用。

      我必须承认这是我第一次看到该命令,我不知道它是否包含在 SQL 标准中。

      【讨论】:

        【解决方案4】:

        事实上,TRUNCATE 是一个 DDL 命令。您提供的第一个链接是正确的,第二个是昨天的fixed

        Wikipedia 也将其定义为 DDL 命令,但在 12 February 2018‎ 上进行的错误编辑(并在 3 April 2018‎ 上正确还原)使得它暂时不这样说。

        【讨论】:

          猜你喜欢
          • 2016-01-02
          • 2023-03-21
          • 2011-04-11
          • 2015-01-25
          • 1970-01-01
          • 2011-02-04
          • 2019-10-05
          • 1970-01-01
          相关资源
          最近更新 更多