在MySQL数据库的实际使用过程中,随着业务需求的变化,我们常常需要对已有的表结构进行调整,比如新增业务字段、修改字段的数据类型、删除冗余字段或者调整表的索引结构等,这些操作都可以通过ALTER TABLE语句来完成。

一、ALTER TABLE基础语法
ALTER TABLE语句的核心作用是修改已存在的表结构,基础语法格式如下:
-- 基础语法框架 ALTER TABLE 表名 操作类型;
其中操作类型包含新增字段、修改字段、删除字段、修改表名、调整索引等多种类型,下面逐一讲解常用操作。
二、常用表结构修改操作
1. 新增字段
如果需要给现有表新增一个字段,可以使用ADD关键字,语法如下:
-- 给user表新增年龄字段,类型为INT,默认值为0,放在name字段之后 ALTER TABLE user ADD COLUMN age INT DEFAULT 0 COMMENT '用户年龄' AFTER name; -- 如果不指定位置,默认加在表字段末尾 ALTER TABLE user ADD COLUMN email VARCHAR(50) COMMENT '用户邮箱';
如果要一次性新增多个字段,可以在ADD后面用括号包裹多个字段定义:
ALTER TABLE user ADD COLUMN phone VARCHAR(20) COMMENT '手机号', ADD COLUMN address VARCHAR(100) COMMENT '家庭地址';
2. 修改字段
修改字段包含修改字段名、修改字段类型、修改默认值等场景,使用MODIFY或者CHANGE关键字:
- MODIFY:只能修改字段的类型、默认值、注释等,不能修改字段名
- CHANGE:可以同时修改字段名和字段的其他属性
-- 使用MODIFY修改age字段的类型为SMALLINT,默认值改为18 ALTER TABLE user MODIFY COLUMN age SMALLINT DEFAULT 18 COMMENT '用户年龄'; -- 使用CHANGE修改email字段名为user_email,同时修改类型为VARCHAR(60) ALTER TABLE user CHANGE COLUMN email user_email VARCHAR(60) COMMENT '用户邮箱';
3. 删除字段
如果表中存在冗余字段需要删除,可以使用DROP关键字,语法如下:
-- 删除user表的address字段 ALTER TABLE user DROP COLUMN address; -- 一次性删除多个字段 ALTER TABLE user DROP COLUMN phone, DROP COLUMN user_email;
4. 修改表名
如果需要修改表的名称,可以使用RENAME TO关键字:
-- 把user表重命名为sys_user ALTER TABLE user RENAME TO sys_user;
5. 调整主键和索引
ALTER TABLE也支持调整表的主键和索引结构,常见操作如下:
-- 删除原有主键 ALTER TABLE sys_user DROP PRIMARY KEY; -- 新增id为主键,自增 ALTER TABLE sys_user ADD PRIMARY KEY (id), MODIFY COLUMN id INT AUTO_INCREMENT; -- 新增普通索引,索引名为idx_age,作用在age字段上 ALTER TABLE sys_user ADD INDEX idx_age (age); -- 删除名为idx_age的索引 ALTER TABLE sys_user DROP INDEX idx_age;
三、操作注意事项
修改表结构属于高风险操作,尤其是生产环境的表,操作前一定要做好数据备份,避免操作失误导致数据丢失。
另外需要注意,如果表的数据量非常大,执行修改字段类型、删除字段等操作时可能会锁表,影响业务的正常读写,建议在业务低峰期执行这类操作。如果使用的是MySQL 8.0及以上版本,部分ALTER TABLE操作支持在线执行,不会长时间阻塞业务,操作前可以先确认当前版本的对应特性。
如果修改表结构时遇到权限不足的问题,需要确认当前数据库用户是否有对应表的ALTER权限,可以联系数据库管理员开通对应权限后再执行操作。
MySQLALTER_TABLE表结构修改数据库操作修改时间:2026-06-13 13:42:32