修改现有的表
在创建表之后,经常会需要修改表,如新增字段、修改约束、表名等,可以使用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 | |
+--------------+-------------+------+-----+---------+----------------+
当向表添加新字段时,如果没有指定NULL
或NOT 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;