业务需求一旦发生变化,数据表结构通常也需要随之调整。例如新增字段、修改字段类型、调整字段顺序、修改表名等。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 时,即使字段名不变,也要把字段名写两次。
修改字段数据类型时需要特别小心:
- 新类型必须兼容现有数据
- 长度缩短时可能导致数据截断
- 某些 DDL 变更在大表上会有锁表或耗时问题
给表增加新字段的基本语法如下:
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 是修改数据表结构的核心语句。常见操作包括改表名、改字段类型、增删字段、改字段名。做表结构变更时,重点不只是语法正确,更要确认对现有数据和业务代码的影响。