SQL ALTER TABLE

摘要:本教程向您展示如何在数据库中使用 SQL ALTER TABLE 来更改现有表的结构。

创建新表 后,您可能想要更改其结构,因为业务需求发生了变化。若要修改表的结构,请使用 ALTER TABLE 语句。ALTER TABLE 语句允许您对现有表执行以下操作

  • 使用 ADD 子句添加新列。
  • 使用 MODIFY 子句修改列的属性,例如约束、默认值等。
  • 使用 DROP 子句删除列。

我们将在以下部分详细探讨每个操作。

SQL ALTER TABLE ADD 列

以下语句阐释了带有 ADD 子句的 ALTER TABLE,允许您向表中添加一列或多列。

ALTER TABLE table_name
ADD new_colum data_type column_constraint [AFTER existing_column];Code language: SQL (Structured Query Language) (sql)

若要向表中添加一列或多列,您需要执行以下步骤

  • 首先,指定要在 ALTER TABLE 子句后用 table_name 表示的要添加列的表。
  • 其次,将新列定义放在 ADD 子句后。如果您希望指定列在表中的顺序,则可以使用可选子句 AFTER existing_column

请注意,如果您省略了 AFTER 子句,所有新列都将在表的最后一列后面添加。

让我们看一下在 创建表教程 中创建的 courses 表中添加新列的一些示例

SQL ALTER TABLE - courses table

以下语句向 courses 表添加名为 credit_hours 的新列。

ALTER TABLE courses ADD credit_hours INT NOT NULL;Code language: SQL (Structured Query Language) (sql)

您可以使用单个 ALTER TABLE 语句向表中添加多列。例如,以下语句向 courses 表中添加 feemax_limit 列,并将这些列放在 course_name 列之后。

ALTER TABLE courses 
ADD fee NUMERIC (10, 2) AFTER course_name,
ADD max_limit INT AFTER course_name;Code language: SQL (Structured Query Language) (sql)

SQL ALTER TABLE MODIFY 列

MODIFY 子句允许您更改现有列的一些属性,例如 NOT NULLUNIQUE数据类型

以下语句向您展示带有 DROP 从句的 ALTER TABLE 语句的语法。

ALTER TABLE table_name
MODIFY column_definition;Code language: SQL (Structured Query Language) (sql)

请注意,您应修改没有数据的表的列属性。因为修改已包含数据的表中的列属性可能导致永久数据丢失。

例如,如果列的数据类型为 VARCHAR, 且您将其更改为 INT,数据库系统必须将数据从 VARCHAR 转换为 INT. 如果转换失败,数据库系统可能使用该列的默认值,而这可能不是您预期的。

以下 ALTER TABLE MODIFY 语句将 fee 列的属性更改为 NOT NULL.

ALTER TABLE courses 
MODIFY fee NUMERIC (10, 2) NOT NULL;Code language: SQL (Structured Query Language) (sql)

SQL ALTER TABLE DROP 列

当表的列已过时并且不被任何其他数据库对象(例如 触发器视图、存储的和存储的过程)使用时,您需要从表中将其删除。

若要删除一列或多列,请使用以下语法

ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...Code language: SQL (Structured Query Language) (sql)

例如,若要删除 courses 表的 fee 列,请使用以下语句。

ALTER TABLE courses DROP COLUMN fee;Code language: SQL (Structured Query Language) (sql)

若要同时删除多列,请使用多个 DROP COLUMN 从句,并用逗号 (,) 分隔。

例如,以下语句删除了 courses 表的 max_limitcredit_hours

ALTER TABLE courses 
DROP COLUMN max_limit,
DROP COLUMN credit_hours;Code language: SQL (Structured Query Language) (sql)

在本教程中,您已逐步了解如何使用 SQL ALTER TABLE 语句添加、修改和删除表中的一列或多列。

本教程是否有用?