ALTER TABLE 是 DDL 操作高發區,語法細節記不住、線上執行怕鎖表。本文整理 10 大高頻場景標準語法,附帶線上執行避坑提示,建議收藏備查。
ALTER TABLE `table_name` DROP `column_name`;
ALTER TABLE `table_name` ADD `column_name` INT NOT NULL COMMENT '註釋說明';
ALTER TABLE `table_name` CHANGE `column_name` `column_name` BIGINT NOT NULL COMMENT '註釋說明';
關鍵: CHANGE 旧名 新名 定義,不改名時新舊名相同。
ALTER TABLE `table_name` CHANGE `old_name` `new_name` BIGINT NOT NULL COMMENT '註釋說明';
ALTER TABLE `old_table_name` RENAME `new_table_name`;
等價於 RENAME TABLE old_table_name TO new_table_name;,支援跨庫移動(實現庫重命名變通)。
ALTER TABLE `table_name` DROP PRIMARY KEY;
ALTER TABLE `sj_resource_charges` ADD CONSTRAINT `PK_SJ_RESOURCE_CHARGES` PRIMARY KEY (`resid`, `resfromid`);
ALTER TABLE `sj_resource_charges` ADD INDEX `IDX_NAME` (`name`);
ALTER TABLE `sj_resource_charges` ADD UNIQUE `UK_CARDNUMBER` (`cardnumber`);
ALTER TABLE `table_name` DROP INDEX `index_name`;
| 操作類型 | 是否拷貝表/鎖表 | 線上建議 |
|---|---|---|
| 增/刪/改欄位、加索引 | 通常需重建表(Copy + Exclusive Lock) | 用 pt-online-schema-change / gh-ost 無鎖變更 |
| 修改 COMMENT、DEFAULT、AUTO_INCREMENT 起始值 | 僅修改元數據(Instant DDL,8.0+) | 直接執行,秒級完成 |
| 重命名表/欄位 | 元數據操作 | 直接執行,極快 |
| 刪除索引 | 僅標記刪除,無拷貝 | 直接執行 |
COMMENT:字段用途、枚舉值含義、單位,利人利己IDX_表縮寫_欄位、UK_表縮寫_欄位、PK_表縮寫pt-osc --alter "ADD INDEX idx_x(x)" D=t,t=tbl --executemysqldump -d db tbl > tbl_struct_backup.sqlEXPLAIN ALTER TABLE ... (8.0.18+) 或 SHOW WARNINGS 後檢查掌握這 10 條核心語法 + 線上執行原則,應對 95% 的 ALTER TABLE 場景遊刃有餘。**大表無鎖變更用工具,小表直連跑,元數據操作放心改**,是 DDL 安全執行的黃金法則。