MySQL - ALTER TABLE 语句



MySQL ALTER TABLE 语句

MySQL 的 ALTER TABLE 语句有助于对表进行更改。使用此语句,我们可以在现有表中添加、删除或修改列,我们还可以重命名它。

语法

以下是 ALTER Table 语句的语法:

ALTER TABLE table_name [alter_option ...];

其中,table_name 是您需要更改的现有表的名称,alter_option 表示您需要对表执行的更改,例如 ADD COLUMNS、DROP COLUMN 等。

添加新列

例如,如果您需要向表添加新列,则应使用 ADD COLUMN 选项,如下所示:

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

假设我们已创建了一个表,如下所示:

CREATE TABLE Employee(
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255)
);

以下查询向 Employee 表添加一个名为 phone 的新列:

ALTER TABLE Employee ADD COLUMN (Phone int (10));

要验证上述查询,如果您使用 DESC 命令描述该表,您可以在字段列表中观察到创建的列,如下所示:

DESC employee;

以下是上述 mysql 查询的输出:

字段 类型 Null 默认值 额外
姓名 varchar(255) YES NULL
薪资 int NULL
位置 varchar(255) YES NULL
电话 int YES NULL

在现有列之后添加列

如果您想在现有列之前或之后添加列,则需要使用 AFTER 后跟现有列的名称(在列定义之后)。

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

以下查询在 Location 之后添加一个名为 address 的列。

ALTER TABLE Employee ADD COLUMN Address VARCHAR(50) AFTER Location;

要验证上述查询,如果您使用 DESC 命令描述该表,您可以在字段列表中观察到创建的列,如下所示:

DESC employee;

输出

上述查询产生以下输出:

字段 类型 Null 默认值 额外
姓名 varchar(255) YES NULL
薪资 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
电话 int YES NULL

在开头添加列

您可以使用 FIRST 语句以及 alter 在开头添加新列,以下是执行此操作的语法:

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

以下查询在开头添加一个名为 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

要验证上述查询,如果您使用 DESC 命令描述该表,您可以在字段列表中观察到创建的列,如下所示:

desc employee;

输出

以下是上述查询的输出:

字段 类型 Null 默认值 额外
ID int YES NULL
姓名 varchar(255) YES NULL
薪资 int NULL
位置 varchar(255) YES NULL
地址 int YES NULL
电话 int YES NULL

删除列

您可以使用 DROP 语句以及 ALTER 删除现有列,以下是执行此操作的语法:

ALTER TABLE table_name DROP COLUMN column_name;

示例

首先,让我们使用 DESC 语句验证表的定义:

desc employee;

输出

上述查询产生以下输出:

字段 类型 Null 默认值 额外
ID int YES NULL
姓名 varchar(255) YES NULL
薪资 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
电话 int YES NULL

以下查询删除名为 ID 的列:

ALTER TABLE Employee DROP COLUMN ID;

要验证上述查询,如果您使用 DESC 命令描述该表,您会发现已删除列的名称在字段列表中不存在:

desc employee;

以下是上述查询的输出:

字段 类型 Null 默认值 额外
姓名 varchar(255) YES NULL
薪资 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
电话 int YES NULL

添加索引

您可以使用 ADD INDEX 语句以及 ALTER 语句向表的现有列添加索引:

ALTER TABLE table_name ADD INDEX index_name [index_type] (key_part,...)

示例

以下查询在 Name 和 Salary 列上添加索引:

ALTER TABLE Employee ADD INDEX sample_index (Name, Salary);

您可以使用 SHOW INDEX 语句验证表的索引,如下所示:

SHOW INDEX FROM Employee;

输出

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

*************** 1. row ***************
        Table: employee
   Non_unique: 1
     Key_name: sample_index
 Seq_in_index: 1
  Column_name: Name
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL
*************** 2. row ***************
        Table: employee
   Non_unique: 1
     Key_name: sample_index
 Seq_in_index: 2
  Column_name: Salary
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL

添加主键

以下是创建主键的语法:

ALTER TABLE table_name ADD CONSTRAINT MyPrimaryKey 
PRIMARY KEY (column1, column2...);

示例

让我们在 Employee 表中创建一个名为 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

以下查询在 ID 列上创建主键:

ALTER TABLE Employee ADD CONSTRAINT MyPrimaryKey PRIMARY KEY(ID);

要验证上述查询,如果您使用 DESC 命令描述该表,您可以在 Key 列下的 ID 字段下观察到 PRI:

desc employee;

输出

以下是上述程序的输出:

字段 类型 Null 默认值 额外
ID int PRI NULL
姓名 varchar(255) YES MUL NULL
薪资 int NULL
位置 varchar(255) YES NULL
电话 int YES NULL

添加外键

以下是创建外键的语法:

ALTER TABLE table_name ADD CONSTRAINT key FORIEGN KEY (column_name);

示例

假设我们创建了另一个名为 test 的表,如下所示:

CREATE table Test (ID int PRIMARY KEY);

让我们在 Employee 表中创建一个名为 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

以下查询在 ID 列上创建主键:

ALTER TABLE Employee ADD CONSTRAINT fk FOREIGN KEY(ID) REFERENCES test(ID);

添加约束

以下是向列添加约束的语法:

ALTER TABLE table_name ADD CONSTRAINT constraint_name 
UNIQUE(column1, column2...);

示例

以下查询向 Employee 表添加 UNIQUE 约束:

ALTER TABLE Employee ADD CONSTRAINT con UNIQUE(Phone);

删除索引

以下是删除表索引的语法:

ALTER TABLE table_name DROP INDEX index_name

示例

以下查询删除上面在 Employee 表上创建的索引:

ALTER TABLE Employee DROP INDEX sample_index;

删除主键

以下是删除主键的语法:

ALTER TABLE table_name DROP PRIMARY key_name;

示例

假设我们创建了一个表并添加了一个 PRIMARY KEY,如下所示:

create table sample (ID INT);
alter table sample add CONSTRAINT PRIMARY KEY (ID);

要验证上述查询,如果您使用 DESC 命令描述该表,您可以在 Key 列下的 ID 字段下观察到 PRI:

desc sample;

输出

以下是上述查询的输出:

字段 类型 Null 默认值 额外
ID int PRI NULL

以下查询删除上面创建的主键:

alter table sample drop PRIMARY KEY;

如果您使用 desc 语句描述示例表,您会发现主键已被删除:

desc sample;

输出

上述查询产生以下输出:

字段 类型 Null 默认值 额外
ID int NULL

删除外键

以下是删除外键的语法:

ALTER TABLE table_name DROP PRIMARY key_name;

示例

以下查询删除 employee 表的外键 fk:

ALTER TABLE Employee DROP FOREIGN KEY fk;
广告

© . All rights reserved.