SQL 修改表结构
SQL – ALTER TABLE 语句
SQL ALTER TABLE 命令是数据定义语言 (DDL) 的一部分,用于修改表的结构。 ALTER TABLE 命令可以添加或删除列,创建或删除索引,更改现有列的类型,或重命名列或表本身。
ALTER TABLE 命令还可以更改表的特性,例如表的存储引擎。我们在示例中将使用以下表:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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);
输出
执行上面的查询将产生以下输出:
(0 rows affected)
验证
为了验证是否通过添加新列SEX来改变了CUSTOMERS表,使用SELECT语句检索表的记录-
SELECT * FROM CUSTOMERS;
现在,CUSTOMERS表将显示如下 –
ID | NAME | AGE | ADDRESS | SALARY | SEX |
---|---|---|---|---|---|
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 – 删除列
如果你需要从表中删除一个已存在的列,你应该使用ALTER TABLE语句和DROP COLUMN选项,如下所示。
ALTER TABLE table_name DROP COLUMN column_name;
示例
以下是从现有表中删除性别列的示例。
ALTER TABLE CUSTOMERS DROP COLUMN SEX;
输出
执行上述查询将产生以下输出 –
(0 rows affected)
验证
为了验证是否通过删除现有列SEX来修改了CUSTOMERS表,请使用SELECT语句检索表的记录 –
SELECT * FROM CUSTOMERS;
现在,CUSTOMERS表已更改,以下是从SELECT语句中输出的结果。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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] (key_part,...) [index_option] .
示例
以下查询在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 – 删除索引
使用ALTER语句与DROP INDEX语句可以从表中删除现有索引。
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 MyPrimaryKey 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;
这将显示创建的表的结构:列名、它们的数据类型、约束(如果有的话)等。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int(11) | NO | PRI | NULL | |
NAME | varchar(20) | NO | NULL | ||
AGE | int(11) | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18,2) | YES | 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