Skip to content

Latest commit

 

History

History
145 lines (93 loc) · 3.39 KB

File metadata and controls

145 lines (93 loc) · 3.39 KB

修改数据表

业务需求一旦发生变化,数据表结构通常也需要随之调整。例如新增字段、修改字段类型、调整字段顺序、修改表名等。MySQL 中对表结构的修改主要通过 ALTER TABLE 完成。

修改表名

修改表名的基本语法如下:

ALTER TABLE 旧表名 RENAME 新表名;

示例:

ALTER TABLE students RENAME workmates;

执行后,原来的 students 表就会变成 workmates

修改表名时要注意:

  • 相关程序代码中的表名也要同步修改
  • 如果存在外键、视图、存储过程等依赖对象,变更前要确认影响范围

修改字段数据类型

修改字段定义,常用两种方式:

  1. MODIFY:修改字段类型或属性,但不改字段名
  2. 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;

删除字段前应先确认:

  1. 应用程序是否仍在使用该字段。
  2. 是否有报表、视图、存储过程依赖该字段。
  3. 历史数据是否还需要保留。

字段删除是结构性变更,通常比新增字段风险更高,生产环境中应格外谨慎。

修改字段名

修改字段名通常也使用 CHANGE

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [约束];

示例:

ALTER TABLE students CHANGE tel telphone char(13) DEFAULT '-';

这条语句既把字段名从 tel 改成了 telphone,也重新定义了字段类型和默认值。

如果只是想改名字,不想改原来的类型,也必须把原类型完整写出来,否则 MySQL 不知道新字段应保持什么定义。

小结

ALTER TABLE 是修改数据表结构的核心语句。常见操作包括改表名、改字段类型、增删字段、改字段名。做表结构变更时,重点不只是语法正确,更要确认对现有数据和业务代码的影响。