4.3 修改数据表
修改表指的是修改数据库中已经存在的数据表的结构。常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置,更改表的存储引擎,删除表的外键约束等。本节将对和修改表有关的操作进行讲解。
4.3.1 修改表名
MySQL是通过ALTER TABLE语句来实现表名的修改的,具体的语法规则如下:
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
其中TO为可选参数,使用与否均不影响结果。
【例4.13】将数据表tb_dept3改名为tb_department3。
执行修改表名操作之前,使用SHOW TABLES查看数据库中所有的表。
mysql> SHOW TABLES;
+---------------------+
| Tables_in_test |
+---------------------+
| tb_dept1 |
| tb_dept2 |
| tb_dept3 |
省略部分内容
使用ALTER TABLE将表tb_dept3改名为tb_department3,SQL语句如下:
ALTER TABLE tb_dept3 RENAME tb_department3;
语句执行之后,检验表tb_dept3是否改名成功。使用SHOW TABLES查看数据库中的表,结果如下:
mysql> SHOW TABLES;
+---------------------+
| Tables_in_test |
+---------------------+
| tb_department3 |
| tb_dept |
| tb_dept2 |
省略部分内容
经过比较可以看到数据表列表中已经有了名称为tb_department3的表。

4.3.2 修改字段的数据类型
修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在MySQL中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
其中“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。
【例4.14】将数据表tb_dept1中name字段的数据类型由VARCHAR(22)的修改成VARCHAR(30)。
执行修改字段数据类型操作之前,使用DESC查看tb_dept表结构,结果如下:
mysql> DESC tb_dept1;
+----------+---------------+---------+--------+-------------+-------+
| Field | Type | Null | Key |Default | Extra |
+----------+---------------+---------+--------+-------------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+---------------+--------+---------+-------------+-------+
3 rows in set (0.00 sec)
可以看到现在name字段的数据类型为VARCHAR(22),下面修改其类型。输入如下SQL语句并执行。
ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);
再次使用DESC查看表,结果如下:
mysql> DESC tb_dept1;
+----------+---------------+---------+--------+-------------+-------+
| Field | Type | Null | Key |Default | Extra |
+----------+---------------+---------+--------+-------------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+---------------+--------+---------+-------------+-------+
3 rows in set (0.00 sec)
语句执行之后,检验会发现表tb_dept表中name字段的数据类型已经修改成了VARCHAR(30),修改成功。
4.3.3 修改字段名
MySQL中修改表字段名的语法规则如下:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
其中,“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样即可,但数据类型不能为空。
【例4.15】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:
ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
使用DESC查看表tb_dept1,会发现字段的名称已经修改成功,结果如下:
mysql> DESC tb_dept1;
+----------+---------------+---------+--------+-------------+-------+
| Field | Type | Null | Key |Default | Extra |
+----------+---------------+---------+--------+-------------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
+----------+---------------+--------+---------+-------------+-------+
3 rows in set (0.00 sec)
【例4.16】将数据表tb_dept1中的loc字段名称改为location,同时将数据类型保持变为VARCHAR(60),SQL语句如下:
ALTER TABLE tb_dept1CHANGE loc location VARCHAR(60);
使用DESC查看表tb_dept1,会发现字段的名称和数据类型均已经修改成功,结果如下:
mysql> DESC tb_dept1;
+----------+---------------+---------+--------+-------------+-------+
| Field | Type | Null | Key |Default | Extra |
+----------+---------------+---------+--------+-------------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
+----------+---------------+--------+---------+-------------+-------+
3 rows in set (0.00 sec)
技巧:CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。