SQL - ALTER TABLE



SQL − ALTER TABLE 语句

SQL 的ALTER TABLE 命令是数据定义语言 (DDL) 的一部分,用于修改表结构。ALTER TABLE 命令可以添加或删除列、创建或删除索引、更改现有列的类型,或重命名列或表本身。

ALTER TABLE 命令还可以更改表的特性,例如表使用的存储引擎。在我们的示例中,我们将使用下表:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

语法

以下是 ALTER TABLE 命令的基本语法:

ALTER TABLE table_name [alter_option ...];

其中,alter_option 取决于要对表执行的操作类型。本文将逐一讨论这些重要操作。

ALTER TABLE − 添加列

如果需要向表中添加新列,应将ADD COLUMN 选项与 ALTER TABLE 语句一起使用,如下所示:

ALTER TABLE table_name ADD column_name datatype;

示例

以下是向现有表中添加新列的示例:

ALTER TABLE CUSTOMERS ADD SEX char(1);

输出

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

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

验证

要验证是否通过添加新列 SEX 来更改 CUSTOMERS 表,请使用 SELECT 语句检索表的记录:

SELECT * FROM CUSTOMERS;

现在,CUSTOMERS 表将显示如下:

ID 姓名 年龄 地址 薪水 性别
1 Ramesh 32 Ahmedabad 2000.00 NULL
2 Khilan 25 Delhi 1500.00 NULL
3 Kaushik 23 Kota 2000.00 NULL
4 Chaitali 25 Mumbai 6500.00 NULL
5 Hardik 27 Bhopal 8500.00 NULL
6 Komal 22 Hyderabad 4500.00 NULL
7 Muffy 24 Indore 10000.00 NULL

ALTER TABLE − 删除列

如果需要从表中删除现有列,应将 DROP COLUMN 选项与 ALTER TABLE 语句一起使用,如下所示。

ALTER TABLE table_name DROP COLUMN column_name;

示例

以下是从现有表中删除 sex 列的示例。

ALTER TABLE CUSTOMERS DROP COLUMN SEX;

输出

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

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

验证

要验证是否通过删除现有列 SEX 来更改 CUSTOMERS 表,请使用 SELECT 语句检索表的记录:

SELECT * FROM CUSTOMERS;

现在,CUSTOMERS 表已更改,SELECT 语句的输出如下。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ALTER TABLE − 添加索引

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

ALTER TABLE table_name 
ADD INDEX index_name [index_type] 

示例

以下查询在 CUSTOMERS 表的 NAME 列上添加索引:

ALTER TABLE CUSTOMERS ADD INDEX name_index (NAME);

输出

输出将显示为:

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

ALTER TABLE − 删除索引

可以使用 DROP INDEX 语句以及 ALTER 语句从表中删除现有索引:

ALTER TABLE table_name DROP INDEX index_name;

示例

以下查询在 CUSTOMERS 表的 NAME 列上添加索引:

ALTER TABLE CUSTOMERS DROP INDEX name_index;

输出

输出将显示为:

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

ALTER TABLE − 添加主键

以下是向数据库现有表中添加主键的语法:

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

示例

在向现有表添加主键之前,让我们先创建一个名为 EMPLOYEES 的新表,如下所示

CREATE TABLE EMPLOYEES(
   ID          INT NOT NULL,
   NAME        VARCHAR (20) NOT NULL,
   AGE         INT NOT NULL,
   ADDRESS     CHAR (25),
   SALARY      DECIMAL (18, 2)
);

以下查询在 EMPLOYEES 表的 ID 列上添加主键约束:

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

这将产生以下输出:

Query OK, 0 rows affected, 1 warning (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 1

验证

要验证上述查询,如果使用 DESC EMPLOYEES 命令描述表:

DESC EMPLOYEES;

这将显示所创建表的结构:列名、它们各自的数据类型、约束(如果有)等。

字段 类型 空值 默认值 额外
ID int(11) PRI NULL
姓名 varchar(20) NULL
年龄 int(11) NULL
地址 char(25) NULL
薪水 decimal(18,2) NULL

ALTER TABLE − 删除主键

以下是从数据库现有表中删除主键的语法:

ALTER TABLE table_name DROP PRIMARY KEY;

示例

以下查询从 EMPLOYEES 表的 ID 列中删除主键约束:

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

这将产生以下输出:

Query OK, 0 rows affected, 1 warning (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 1

ALTER TABLE − 添加约束

以下是向现有表列添加唯一约束的语法:

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

示例

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

ALTER TABLE EMPLOYEES ADD CONSTRAINT CONST UNIQUE(NAME);

这将产生以下输出:

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

ALTER TABLE − 删除约束

以下是删除现有表唯一约束的语法:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

示例

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

ALTER TABLE EMPLOYEES DROP CONSTRAINT CONST;

这将产生以下输出:

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

ALTER TABLE − 重命名列

以下是重命名现有表列名的语法:

ALTER TABLE table_name 
RENAME COLUMN old_column_name to new_column_name;

示例

以下查询重命名 CUSTOMERS 表中的 NAME 列:

ALTER TABLE CUSTOMERS RENAME COLUMN name to full_name;

这将产生以下输出:

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

ALTER TABLE − 修改数据类型

以下是更改 MySQL、MS Server 和 Oracle 中任何列的数据类型的语法。

SQL Server/MS Access 语法

ALTER TABLE table_name ALTER COLUMN column_name datatype;

MySQL 语法

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

Oracle 语法

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

示例

以下查询修改 MySQL CUSTOMERS 表中 SALARY 列的数据类型:

ALTER TABLE CUSTOMERS MODIFY COLUMN ID DECIMAL(18, 4);

这将产生以下输出:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0
广告