快速上手:最常用 10 條 ALTER 語句模板
| 特性 | MODIFY | CHANGE |
| 列名 | 保持不變 | **必須指定新列名** (可同名) |
| 類型/屬性 | 可修改 | 可修改 |
| 移動位置 | 支持 FIRST/AFTER | 支持 FIRST/AFTER |
| 適用場景 | 調整類型、長度、默認值、註釋 | 重命名列、或同時改名改類型 |
位置移動語法
-- 語法
ALTER TABLE tbl_name ... [ALGORITHM={DEFAULT|INSTANT|INPLACE|COPY}] [LOCK={DEFAULT|NONE|SHARED|EXCLUSIVE}];
-- 參數含義
ALGORITHM:
INSTANT - 8.0.12+ 僅修改元數據,極速、零鎖 (添加帶默認值列、刪除列 8.0.29+、修改註釋等)
INPLACE - 原地重建,不拷貝臨時表,允許並發 DML (大多數 ADD INDEX、MODIFY COLUMN)
COPY - 拷貝臨時表,全程獨佔鎖 (修改字符集、引擎、刪除主鍵、5.6 早期版本)
DEFAULT - MySQL 自動選擇最優
LOCK:
NONE - 無鎖 (INSTANT 專用)
SHARED - 共享鎖 (允許讀寫,INPLACE 常用)
EXCLUSIVE- 獨佔鎖 (阻塞讀寫,COPY 必用)
DEFAULT - 自動選擇
生產大表加索引標準寫法
-- 添加範圍分區
ALTER TABLE sales ADD PARTITION (PARTITION p2024 VALUES LESS THAN (2025));
-- 刪除分區 (數據永久刪除)
ALTER TABLE sales DROP PARTITION p2020;
-- 重組分區 (合併/拆分,保留數據)
ALTER TABLE sales REORGANIZE PARTITION p2020, p2021 INTO (
PARTITION p2021 VALUES LESS THAN (2022)
);
-- 維護單分區
ALTER TABLE sales REBUILD PARTITION p2023; -- 重建/整理碎片
ALTER TABLE sales ANALYZE PARTITION p2023; -- 更新統計信息
總結:ALTER TABLE 操作決策樹
- 是否大表 (>500萬行/>5GB)?→ 是:必用 gh-ost/pt-osc 或 INSTANT/INPLACE 算法 + LOCK=SHARED/NONE;否:直接執行。
- 操作類型?→ 添加帶默認值列 用 INSTANT;加索引/修改列 用 INPLACE;改字符集/引擎/刪除列 需 COPY → 必走工具。
- 是否涉及分區?→ 使用分區專用子句 (
ADD/DROP/REORGANIZE PARTITION)。
- 執行前必備:備份驗證、低峰期窗口、監控告警就緒、回滾方案預案。