在 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 属性)