在 MySQL 中,ALTER TABLE
语句可以改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。
其语法格式如下:
ALTER TABLE <表名> [修改选项]
修改选项的语法格式如下:
-
{ ADD COLUMN <列名> <类型>
-
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
-
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
-
| MODIFY COLUMN <列名> <类型>
-
| DROP COLUMN <列名>
-
| RENAME TO <新表名>
-
| CHARACTER SET <字符集名>
-
| COLLATE <校对规则名> }
修改字段数据类型
修改字段的数据类型就是把字段的数据类型转换成另一种数据类型。在 MySQL 中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
其中:
-
表名:指要修改数据类型的字段所在表的名称;
-
字段名:指需要修改的字段;
-
数据类型:指修改后字段的新数据类型。
示例:
在 test 数据库中新建 student 数据表,SQL 语句和运行结果如下:
mysql> USE test; Database changed mysql> CREATE TABLE student ( -> id INT(4), -> name VARCHAR(20), -> sex CHAR(1)); Query OK, 0 rows affected (0.09 sec)
使用 DESC 查看 student 表结构,SQL 语句和运行结果如下:
mysql> DESC student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(4) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)
使用 ALTER TABLE 修改表 student 的结构,将 name 字段的数据类型由 VARCHAR(20) 修改成 VARCHAR(30),SQL 语句和运行结果如下所示。
mysql> ALTER TABLE student -> MODIFY name VARCHAR(30); Query OK, 0 rows affected (0.15 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC student; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | sex | char(1) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
语句执行后,发现表 student 中 name 字段的数据类型已经修改成 VARCHAR(30),修改成功。