跳至内容

SQL DDL 命令:权威指南

了解 SQL DDL 命令,以及它们如何用于定义和管理数据库对象的结构。
已更新 2026年10月6日  · 11分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

对于数据科学家和数据工程师来说,SQL 是从数据库中获取洞见的必备工具。数据库由多张表组成,SQL 也有不同的“方言”,从 PostgreSQL 到 Snowflake 不一而足。

在 SQL 中,数据定义语言(DDL)命令用于定义和管理数据库对象的结构。本文将通过一个电影数据库示例讲解 SQL 中的 DDL 命令。让我们开始吧!

什么是 SQL 中的 DDL 命令?

数据定义语言(DDL)命令使我能够在 SQL 中定义和管理架构(schema)。简而言之,SQL 中的架构是一份蓝图,用于规定数据在数据库中的组织方式,以及库内不同表之间关系的管理方式。

DDL 命令由多种具备不同功能的命令组成,我将按以下顺序介绍:

DDL 命令

描述

语法

CREATE

创建一张表及其列,并指定各列的数据类型。

CREATE TABLE

ALTER

修改列名,以及添加或删除列。

ALTER TABLE

RENAME

更改表名。

RENAME TABLE

COMMENT

为 SQL 代码添加说明,便于团队成员审阅。

--

/* …

…*/

TRUNCATE

在不删除表的情况下清空表中数据。

TRUNCATE TABLE

DROP

删除整张表及其数据。

DROP TABLE

SQL 中的 DDL 命令示例

现在我们已经对 DDL 命令及其用途有了基本了解,接下来用电影数据库来看看一些实用示例。

SQL 中的 CREATE 命令

当我需要创建新表时,会使用如下所示的 CREATE TABLE 命令:

CREATE TABLE table_name (
    column_1 datatype,
    column_2 datatype,
    ...,
    column_n datatype
);

在上述示例中,我为列定义了不同的数据类型。SQL 支持多种数据类型,但最常见的通常是 STRING(文本)、INT(整数)、FLOAT(小数)和 DATE(日期)。

例如,如果我想创建表 actor,可以这样使用 CREATE TABLE:

CREATE TABLE actor (
    actor_id String(32767),
    first_name String(32767),
    last_name String(32767),
    last_update String(32767)
);

其中:

  • actor 是表名
  • actor_id 是列名,其内容应为文本格式(String),且不超过 32767 个字符。
  • first_name 是列名,其内容应为文本格式(String),且不超过 32767 个字符。
  • last_name 是列名,其内容应为文本格式(String),且不超过 32767 个字符。
  • last_update 是列名,其内容应为文本格式(String),且不超过 32767 个字符。

执行查询后,新表会与其他表一同显示,此后我就可以随时查询它。

SQL 中的 ALTER 命令

使用 SQL 中的 ALTER,我可以在不新建并删除旧表的情况下更新一张表。组织往往有成千上万张表,掌握如何在不冒数据丢失风险的前提下保持数据最新至关重要。

需要注意的是,ALTER 有多种用法,包括:

  • 在表中添加新列
  • 重命名表中的列
  • 修改表中的列
  • 删除表中的列

ALTER 中的 ADD 命令

要使用 ALTER 添加新列,我们将 ALTER 与 ADD 命令组合使用,如下所示:

ALTER TABLE table_name ADD column_name datatype;

这里,我们在 actor 表中添加一个名为 nationality、数据类型为 STRING 的新列。

ALTER TABLE actor ADD nationality String(32767);

所有 SQL 中的 ALTER 命令都遵循类似的结构,使 SQL 成为一种自然易学、易于掌握的语言。

ALTER 中的 RENAME 命令

每当我需要更改列名时,会按如下方式在 ALTER 中使用 RENAME 命令:

ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;

例如,让我们将列名 last_name 改为 family_name,以避免它指代中间名还是姓氏的歧义。在这种情况下,我会执行以下查询:

ALTER TABLE actor RENAME COLUMN last_name TO family_name;

ALTER 中的 MODIFY 命令

数据类型定义了列的属性,并影响数据质量。例如,last_update 被设为 String(text),但数据显然表示日期和时间。

参考不同的数据类型并回看该列中的数据,合适的数据类型应为 TIMESTAMP。

适当更新列的数据类型,有助于借助其他SQL 命令按日期进行聚合和过滤。以下是我们在 SQL 中使用 MODIFY 的方式:

ALTER TABLE table_name ALTER COLUMN column_name datatype;

将上述思路应用到 last_update,我会使用以下查询:

ALTER TABLE actor ALTER COLUMN last_update TIMESTAMP;

ALTER 中的 DROP 命令

ALTER 的最后一个选项是删除列。我可能需要 DROP 某列的原因很多,包括但不限于:

  • 信息不再相关,
  • 信息重复(同一列在另一张表中也存在),
  • 数据质量问题,
  • 优化存储空间。

在 SQL 中删除列很简单,但请谨慎使用,因为删除操作并不总是可逆的。

ALTER TABLE table_name DROP COLUMN column_name;

删除列的命令与重命名列的命令看起来相似,但二者并不相同。重命名列会保留列中的数据,只是更改表头;而 DROP 会同时移除数据和表头,就像该列从未存在过一样。

在意识到 last_update 这一列除表明数据库是否刷新外几乎没有信息后,我决定使用以下查询将其删除:

ALTER TABLE actor DROP COLUMN last_update; 

SQL 中的 RENAME 命令

RENAME 命令仅用于更改表名,不要与 ALTER 的 RENAME 能力混淆。实际上,更改表名的查询很简单:

RENAME TABLE old_table_name TO new_table_name;

表 actor 只包含姓名,并未包含有关演员的其他信息。因此,将表名更明确地改为:

SQL 中的 COMMENT

在 SQL 中编写注释对于清晰与上下文至关重要,可让查询更易于理解与维护。它有助于解释复杂逻辑、记录变更并阐明某些选择的理由。在 SQL 中,您可以通过两种方式添加注释:

  • 单行注释
  • 多行注释

我们来看一下如何使用。

SQL 中的单行注释

单行注释通常紧随代码编写,如下所示。这样,我在阅读代码时就能同时看到同事的注释。

在 actor 表中,actor_id 和 last_update 语义不够直观,需要用注释加以说明。

CREATE TABLE actor (
 actor_id String(32767), --unique identifier
 first_name String(32767),
 last_name String(32767),
 last_update String(32767)--datetime of last update
);

SQL 中的注释与本文其他命令不同,因为它并不调用一个名为 COMMENT 的函数。两个连续的短横线且中间不留空格“--”表示注释的开始,其后的任何内容都不会被视为代码的一部分。

SQL 中的多行注释

当说明较长时,请使用多行注释。这更适合解释函数或提供详细上下文。要在 SQL 中添加多行注释,以 /* 开头并以 */ 结尾。SQL 引擎会忽略写在 /* 与 */ 之间的任何内容,并且不会作为查询的一部分执行。

/* Create a table `actor` with the actors’ names. Store first and last name, and keep track of any updates*/
CREATE TABLE actor (
 actor_id String(32767), --unique internal identifier
 first_name String(32767),
 last_name String(32767),
 last_update String(32767)--datetime of last update
);

SQL 中的 TRUNCATE 命令

清空(truncate)表与删除表并不相同。清空会移除所有数据,但保留表结构;而删除则会同时移除整张表及其结构。务必根据目的谨慎选择合适的命令。

TRUNCATE 在 Excel 中的等效操作类似于选中列名下的所有数据并按 Delete。在 SQL 中,我会这样写:

TRUNCATE TABLE table_name;

如果需要清空 actor,我会执行:

TRUNCATE TABLE actor;

结果将是一张只有列名而没有任何值的表。

SQL 中的 DROP 命令

与 TRUNCATE 相反,DDL 命令 DROP 会将表及其所有数据一并删除。执行此类命令时必须谨慎,因为此操作并不总是可逆。DROP 命令的结构与 TRUNCATE 类似:

DROP TABLE table_name;

因此,删除表 actor 只需:

DROP TABLE actor;

尽管不同的 SQL 方言在语法上可能略有差异,但无论您使用哪种 SQL 版本,以上 DDL 命令在大体上都是一致的。

DDL 命令与其他类型命令的对比

在上一节中,我解释了 DDL 命令如何定义表的结构,并在需要时更新其内容或属性。其他类型的SQL 命令可以用于选择、聚合、更新,甚至连接多张表,以获得不同的数据视图,每一类命令都有其特定目的。

命令

定义

用途

DQL

数据查询语言

根据条件从数据库获取数据

DML

数据操作语言

以比 ALTER 更丰富的功能来操作数据库中的表。

DCL

数据控制语言

访问与权限的控制。

TCL

事务控制语言

将通过 DML 命令所做的更改提交到数据库

在 DataCamp 提升您的 SQL 技能

良好的数据质量有赖于数据被清晰定义并结构化。SQL 中的 DDL 命令帮助数据从业者构建并维护结构化的数据库。其他 SQL 命令(如DML 命令)可用于查看、聚合、插入、过滤与合并数据。通过以下资源进一步学习 SQL 并提升您的技能:


Deandra Cutajar's photo
Author
Deandra Cutajar
LinkedIn

数据与人工智能领域的专业人士,在构建定制化数据科学模型方面拥有丰富经验,既精通统计方法,也擅长时间序列、LLM、神经网络和图论等先进模型。

主题
SQL

从今天开始继续您的 SQL 学习之旅!

课程

SQL 入门

2 小时
1.6M
两小时学会用 SQL 创建和查询关系型数据库。
查看详情Right Arrow
开始课程
查看更多Right Arrow