业务需求一旦发生变化,数据表结构通常也需要随之调整。例如新增字段、修改字段类型、调整字段顺序、修改表名等。MySQL 中对表结构的修改主要通过 ALTER TABLE 完成。
修改表名的基本语法如下:
ALTER TABLE 旧表名 RENAME 新表名;
示例:
ALTER TABLE students RENAME workmates;
执行后,原来的 students 表就会变成 workmates。
修改表名时要注意:
修改字段定义,常用两种方式:
MODIFY:修改字段类型或属性,但不改字段名CHANGE:既可以改字段名,也可以改类型和属性MODIFY 的基本语法:
ALTER TABLE 表名 MODIFY 字段名 新数据类型 [约束];
示例:
ALTER TABLE meeting
MODIFY weeks varchar(20) NOT NULL DEFAULT '' COMMENT '开放日期';
CHANGE 的基本语法:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [约束];
示例:
ALTER TABLE students CHANGE tel telphone char(13) DEFAULT '-';
ALTER TABLE students CHANGE name name char(16) NOT NULL;
使用 CHANGE 时,即使字段名不变,也要把字段名写两次。
修改字段数据类型时需要特别小心:
给表增加新字段的基本语法如下:
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];
示例:
ALTER TABLE students ADD address char(60);
默认情况下,新字段会加在表末尾。如果想指定位置,可以使用 AFTER:
ALTER TABLE students ADD birthday date AFTER age;
也可以显式写 COLUMN:
ALTER TABLE students
ADD COLUMN weeks varchar(5) NOT NULL DEFAULT '' AFTER number_people;
添加字段时建议同时明确:
否则后续使用时容易出现脏数据或语义不清的问题。
删除字段的基本语法如下:
ALTER TABLE 表名 DROP 字段名;
示例:
ALTER TABLE students DROP birthday;
删除字段前应先确认:
字段删除是结构性变更,通常比新增字段风险更高,生产环境中应格外谨慎。
修改字段名通常也使用 CHANGE:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [约束];
示例:
ALTER TABLE students CHANGE tel telphone char(13) DEFAULT '-';
这条语句既把字段名从 tel 改成了 telphone,也重新定义了字段类型和默认值。
如果只是想改名字,不想改原来的类型,也必须把原类型完整写出来,否则 MySQL 不知道新字段应保持什么定义。
ALTER TABLE 是修改数据表结构的核心语句。常见操作包括改表名、改字段类型、增删字段、改字段名。做表结构变更时,重点不只是语法正确,更要确认对现有数据和业务代码的影响。