MySQL - ALTER TABLE 语句
MySQL ALTER TABLE 语句
MySQL 的 Alter TABLE 语句用于对表执行更改。使用此语句,我们可以添加、删除或修改现有表中的列,还可以重命名表。
语法
以下是 ALTER TABLE 语句的语法 -
ALTER TABLE table_name [alter_option ...];
其中,table_name 是您需要更改的现有表的名称,alter_option 表示您需要对该表执行的更改,例如添加列、删除列等。
添加新列
例如,如果您需要向表中添加新列,则应使用 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 查询的输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
Name | varchar(255) | YES | NULL | ||
Salary | int | No | NULL | ||
Location | varchar(255) | YES | NULL | ||
Phone | 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;
输出
上述查询产生以下输出
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
Name | varchar(255) | YES | NULL | ||
Salary | int | NO | NULL | ||
Location | varchar(255) | YES | NULL | ||
Address | varchar(50) | YES | NULL | ||
Phone | 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;
输出
以下是上述查询的输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
Name | varchar(255) | YES | NULL | ||
Salary | int | NO | NULL | ||
Location | varchar(255) | YES | NULL | ||
Address | int | YES | NULL | ||
Phone | int | YES | NULL |
删除列
您可以使用 DROP 语句和 ALTER 语句删除现有列,以下是操作语法:-
ALTER TABLE table_name DROP COLUMN column_name;
示例
首先,让我们使用 DESC 语句验证表的定义:-
desc employee;
输出
上述查询产生以下输出:-
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
Name | varchar(255) | YES | NULL | ||
Salary | int | NO | NULL | ||
Location | varchar(255) | YES | NULL | ||
Address | varchar(50) | YES | NULL | ||
Phone | int | YES | NULL |
以下查询删除名为 ID 的列 -
ALTER TABLE Employee DROP COLUMN ID;
为了验证上述查询,如果您使用 DESC 命令描述表,您可以观察到字段列表中缺少已删除列的名称 -
desc employee;
以下是上述查询的输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
Name | varchar(255) | YES | NULL | ||
Salary | int | NO | NULL | ||
Location | varchar(255) | YES | NULL | ||
Address | varchar(50) | YES | NULL | ||
Phone | 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;
输出
以下是上述程序的输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | |
Name | varchar(255) | YES | MUL | NULL | |
Salary | int | NO | NULL | ||
Location | varchar(255) | YES | NULL | ||
Phone | 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;
示例
假设我们创建了一个表并添加了一个主键,如下所示 -
create table sample (ID INT); alter table sample add CONSTRAINT PRIMARY KEY (ID);
要验证上述查询,如果您使用 DESC 命令描述表,则可以观察 Key 列下 ID 字段的 PRI -
desc sample;
输出
以下是上述查询的输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL |
以下查询将删除上面创建的主键 -
alter table sample drop PRIMARY KEY;
如果使用 desc 语句描述示例表,您可以观察到主约束已被删除 -
desc sample;
输出
上述查询产生以下输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | NULL |
删除外键
以下是删除外键的语法 -
ALTER TABLE table_name DROP PRIMARY key_name;
示例
以下查询删除表 employee 的外键 fk -
ALTER TABLE Employee DROP FOREIGN KEY fk;