MySQL修改表结构主要用ALTER TABLE语句,包括ADD COLUMN添加字段、DROP COLUMN删除字段、MODIFY/CHANGE修改字段定义、增删索引及主键等操作,需注意语法差异与数据兼容性。

在 MySQL 中修改表结构,主要依靠 ALTER TABLE 语句。它功能强大,但不同操作语法差异明显,稍不注意就容易报错或影响数据。下面按常见需求分类说明,帮你快速掌握核心用法。
添加字段(ADD COLUMN)
向已有表中新增一列,需指定字段名、数据类型,还可加约束(如 NOT NULL、DEFAULT)。
- 基础写法:ALTER TABLE 表名 ADD COLUMN 字段名 数据类型;
- 带默认值:ALTER TABLE users ADD COLUMN status TINYINT DEFAULT 1;
- 指定位置(可选):ADD COLUMN created_at DATETIME AFTER username;(放在 username 后)
删除字段(DROP COLUMN)
删除列会同时清除该列所有数据,不可逆,执行前务必确认。
- 基本语法:ALTER TABLE 表名 DROP COLUMN 字段名;
- 一次删多个:ALTER TABLE logs DROP COLUMN ip, DROP COLUMN user_agent;
- 注意:MySQL 8.0.19+ 支持一次写多个 DROP COLUMN,旧版本需分多次执行。
修改字段定义(MODIFY / CHANGE)
两者都可改类型、长度、约束,区别在于:CHANGE 可同时改字段名,MODIFY 不能改名。
- 仅改类型/约束(用 MODIFY):ALTER TABLE products MODIFY price DECIMAL(10,2) NOT NULL;
- 改名 + 改类型(用 CHANGE):ALTER TABLE orders CHANGE order_date created_at DATETIME;
- 注意:修改字段类型时,若原数据不兼容新类型(如 TEXT 转 INT),会报错或被截断,建议先检查数据。
添加/删除索引与主键
索引直接影响查询性能,增删需结合业务读写特点判断。
- 加普通索引:ALTER TABLE articles ADD INDEX idx_title (title);
- 加唯一索引:ALTER TABLE users ADD UNIQUE INDEX uk_email (email);
- 删索引:ALTER TABLE logs DROP INDEX idx_status;
- 设主键(表无主键时):ALTER TABLE temp ADD PRIMARY KEY (id);
- 删主键:ALTER TABLE temp DROP PRIMARY KEY;(注意:若主键是自增,需先去掉 AUTO_INCREMENT 属性)










