Mysql 简明教程

MySQL - ALTER Command

MySQL ALTER Command

MySQL ALTER 命令用于修改现有表的结构。它允许进行各种更改,例如添加、删除或修改表内的列。

此外,ALTER 命令还用于添加和撤销与现有表关联的不同约束。

Syntax

以下是 MySQL 中 ALTER 命令的语法 −

ALTER TABLE table_name [alter_option ...];

Example

让我们从创建一个名为 CUSTOMERS 的表开始。

CREATE TABLE CUSTOMERS (
   ID INT,
   NAME VARCHAR(20)
);

现在,执行以下查询以显示 CUSTOMERS 表中列的信息。

SHOW COLUMNS FROM CUSTOMERS;

Output

以下是 CUSTOMERS 中列的详细信息 −

Dropping a Column

要删除现有表中的列,我们使用带 DROP 子句的 ALTER TABLE 命令。

Example

在以下示例中,我们删除了上文中创建的 CUSTOMERS 表中的一个已有列 ID

ALTER TABLE CUSTOMERS DROP ID;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

要确认 ID 列是否已从 CUSTOMERS 表中删除,执行以下查询 −

SHOW COLUMNS FROM CUSTOMERS;

如我们在下面的输出中看到的,不存在 ID 列。所以它被删除了。

Note: A DROP 子句在列是表中仅剩下的列时不起作用。

Adding a Column

要在一个现有表中添加一个新列,我们在 ALTER TABLE 命令中使用 ADD 关键字。

Example

在以下查询中,我们在一个已有表 CUSTOMERS 中添加了一个名为 ID 的列。

ALTER TABLE CUSTOMERS ADD ID INT;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

现在, CUSTOMERS 表将包含与你最初创建该表时相同的两列。但新添加的 ID 列将默认添加到表的末尾。在此示例中,它将添加到 NAME 列之后。

Verification

让我们使用以下查询进行验证 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们在下面的输出中看到的那样,新增的 ID 列插入在表的末尾。

Repositioning a Column

如果我们希望列置于表中的特定位置,可以使用 FIRST 将其置为第一列,或使用 AFTER col_name 指示新列应置于 col_name 之后。

Example

考虑之前修改的 CUSTOMERS 表,其中 NAME 为第一列,ID 为最后一列。

在以下查询中,我们从表中移除 ID 列,然后将其添加回来,使用 FIRST 关键字将其置于表中的第一列 −

ALTER TABLE CUSTOMERS DROP ID;
ALTER TABLE CUSTOMERS ADD ID INT FIRST;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中列的位置 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们在下面的输出中看到的那样,ID 列被置于第一位。

Example

在此,我们从表中移除 ID 列,然后将其添加回来,使用 AFTER col_name 关键字将其置于 NAME 列之后。

ALTER TABLE CUSTOMERS DROP ID;
ALTER TABLE CUSTOMERS ADD ID INT AFTER NAME;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中列的位置 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们在下面的输出中看到的那样,ID 列被置于第一位。

Note: FIRST 和 AFTER 规范符仅适用于 ADD 子句。这意味着,如果您想重新定位表中的现有列,您首先必须 DROP 它,然后 ADD 它到新位置。

Altering a Column Definition or a Name

在 MySQL 中,要更改列的定义,我们需要在 ALTER 命令中使用 MODIFYCHANGE 子句。

Example

在下面的查询中,我们使用 MODIFY 子句将列 NAME 的定义从 varchar(20) 更改为 INT −

ALTER TABLE CUSTOMERS MODIFY NAME INT;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中 NAME 列的定义 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们观察到的,NAME 列的定义已更改为 INT。

Example

我们还可以使用 CHANGE 更改列定义,但语法与 MODIFY 略有不同。在 CHANGE 关键字之后,我们指定要更改的列的名称(两次),然后指定新定义。

在此,我们使用 CHANGE 子句将列 ID 的定义从 INT 更改为 varchar(20): −

ALTER TABLE CUSTOMERS MODIFY ID VARCHAR(20);

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中 NAME 列的定义 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们观察到的,NAME 列的定义已更改为 INT。

Altering a Column’s Default Value

在 MySQL 中,我们可以使用 DEFAULT 约束与 ALTER 命令一起更改任何列的默认值。

Example

在以下示例中,我们将 changingNAME 的默认值。

ALTER TABLE CUSTOMERS ALTER NAME SET DEFAULT 1000;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 −

SHOW COLUMNS FROM CUSTOMERS;

正如我们观察到的,NAME 列的默认值已更改为 1000。

Example

我们可以用 DROP 从任何列中删除默认约束和 ALTER 命令一起使用。

在此,我们删除了 NAME 列的默认约束。

ALTER TABLE CUSTOMERS ALTER NAME DROP DEFAULT;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

Verification

现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 −

SHOW COLUMNS FROM CUSTOMERS;

我们可以看到,NAME 列的默认值已更改为 NULL。

Altering (Renaming) a Table

要重命名表,请使用 RENAMEALTER TABLE 语句选项。

Example

以下查询将 CUSTOMERS 表重命名为 BUYERS。

ALTER TABLE CUSTOMERS RENAME TO BUYERS;

Output

执行上述查询将产生以下输出:

Query OK, 0 rows affected (0.02 sec)

Verification

现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 −

SHOW COLUMNS FROM BUYERS;

可以看到,表已重命名为 BUYERS,有它里面的列。

Altering Table Using a Client Program

除了使用 MySQL 查询更改 MySQL 数据库中的现有表外,还可以使用客户端程序执行 ALTER TABLE 操作。

Syntax

以下是各种编程语言中从 MySQL 数据库更改表的语法:

Example

以下是这些程序 −