SQL ALTER TABLE

修改现有的表

在创建表之后,经常会需要修改表,如新增字段、修改约束、表名等,可以使用ALTER TABLE语句来修改。

假设我们的数据库中有一个shippers表,其结构如下:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

添加新列

向现有表添加新列的基本语法如下:

ALTER TABLE table_name ADD column_name data_type constraints;

下面的语句向shippers表添加了一个新字段fax(传真)。

ALTER TABLE shippers ADD fax VARCHAR(20);

在执行上述语句之后,可使用DESCRIBE shippers;命令查看表结构。

在MySQL命令行,它看起来如下:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
| fax          | varchar(20) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

当向表添加新字段时,如果没有指定NULLNOT NULL,默认为指定NULL

默认情况下,MySQL在末尾添加新字段。但是,如果想在特定字段之后添加新字段,可以使用AFTER子句,如下所示:

ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;

MySQL提供了另一个FIRST子句,可以在表的开头添加新字段。只需把前面示例中的AFTER替换为FIRST子句,就会把字段fax添加到shippers表的开头。

改变列的位置

在MySQL中,如果已经创建好了一个表,想调整字段位置,可用以下语法更改:

ALTER TABLE table_name 
MODIFY column_name column_definition AFTER column_name;

下面的语句将shippers表中的字段fax放在shipper_name之后。

ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;

添加约束

shippers表phone字段应该是唯一的,但目前没有唯一性约束。

给字段添加唯一性约束的基本语法如下:

ALTER TABLE table_name ADD UNIQUE (column_name,...);

下面的语句为phone字段添加了唯一性约束。

ALTER TABLE shippers ADD UNIQUE (phone);

执行此语句后,如果插入一个重复的电话号码,将报错。

类似地,如果表没有主键,可以添加一个:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);

下面的语句将主键约束添加到shipper_id列(如果没有定义)。

ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);

删除字段

从表中删除字段的基本语法如下:

ALTER TABLE table_name DROP COLUMN column_name;

下面的语句将从shippers表中删除字段fax

ALTER TABLE shippers DROP COLUMN fax;

执行了上面语句之后,表结构如下:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(20) | NO   | UNI | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

更改字段的数据类型

在SQL Server中,可以使用ALTER COLUMN子句修改列的数据类型,如下所示:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;

MySQL不支持ALTER COLUMN语法,而是支持等价的MODIFY子句,您可以使用该子句修改字段数据类型,如下所示:

ALTER TABLE table_name MODIFY column_name new_data_type;

下面的语句将shippers表中phone字段的数据类型,从VARCHAR改为CHAR,并将长度从20改为15

ALTER TABLE shippers MODIFY phone CHAR(15);

类似地,MySQL中,可以用MODIFY子句修改字段,例如:设置是否允许空值,如下所示:

ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;

重命名表

MySQL中重命名现有表的基本语法如下:

ALTER TABLE current_table_name RENAME new_column_name;

以下语句重命名shippers表为shipper。

ALTER TABLE shippers RENAME shipper;

也可以用RENAME TABLE语句达到同样效果,如下所示:

RENAME TABLE shippers TO shipper;


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载