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