MySQL ALTER 命令
用 ALTER TABLE 改表结构:加列、改类型、加索引。
Key PointsALTER 会锁表(8.0 的 INSTANT / INPLACE 可大幅减负),大表改结构要选低峰期。
常用操作
SQL
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;
ALTER TABLE users MODIFY COLUMN age SMALLINT UNSIGNED DEFAULT 0;
ALTER TABLE users DROP COLUMN phone;
ALTER TABLE users ADD INDEX idx_age (age);
ALTER TABLE users CHANGE username uname VARCHAR(60);Output
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 08.0 的 INSTANT
SQL
-- 仅加列且允许 NULL / 默认值,8.0 可秒级完成(INSTANT 算法)
ALTER TABLE users ADD COLUMN remark VARCHAR(255), ALGORITHM=INSTANT;On old versions
ALTER locks and copies the whole table, killing production. For big tables prefer ALGORITHM=INSTANT (add column only) or pt-online-schema-change / gh-ost.常用操作
SQL
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;
ALTER TABLE users MODIFY COLUMN age SMALLINT UNSIGNED DEFAULT 0;
ALTER TABLE users DROP COLUMN phone;
ALTER TABLE users ADD INDEX idx_age (age);
ALTER TABLE users CHANGE username uname VARCHAR(60);Output
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 08.0 的 INSTANT
SQL
-- 仅加列且允许 NULL / 默认值,8.0 可秒级完成(INSTANT 算法)
ALTER TABLE users ADD COLUMN remark VARCHAR(255), ALGORITHM=INSTANT;大表
ALTER 在旧版本会锁全表、复制整张表,线上极易拖垮服务。大表改结构优先用 ALGORITHM=INSTANT(仅加列),否则用 pt-online-schema-change / gh-ost 做在线变更。