修改列數據類型
ALTER TABLE visitor MODIFY nam VARCHAR(30);
新增列
ALTER TABLE visitor ADD age INT; -- 末尾
ALTER TABLE visitor ADD age INT FIRST; -- 首列
ALTER TABLE visitor ADD age INT AFTER nam; -- 指定列後
移動列位置
ALTER TABLE visitor MODIFY age INT AFTER nam;
修改列名與類型
ALTER TABLE visitor CHANGE birth birthday DATE;
刪除列
ALTER TABLE visitor DROP age;
表複製
-- 結構+數據
CREATE TABLE customerH SELECT * FROM customer;
-- 僅結構
CREATE TABLE customerG LIKE customer;
INSERT INTO customerG SELECT * FROM customer;
-- 部分列複製
INSERT INTO tb1G(no) SELECT bang FROM tb1;
刪除表
DROP TABLE IF EXISTS customerG; -- 安全,不存在不報錯
DROP TABLE customerG; -- 不存在報錯
操作對比速查
| 操作 | 關鍵字 | 是否鎖表 | 備註 |
| 修改類型 | MODIFY | 是 (MDL鎖) | 大表慎用,建議 pt-online-schema-change |
| 新增列 | ADD | 是 | 指定位置用 FIRST/AFTER |
| 移動列 | MODIFY ... AFTER | 是 | 實際重建表 |
| 改名+改類型 | CHANGE | 是 | 舊名 新名 類型 |
| 刪除列 | DROP | 是 | 數據永久丟失 |
| 複製結構 | LIKE | 否 | 極快,不複製數據/索引統計 |
| 複製全表 | SELECT * INTO | 是 | 大表慎用 |
大表 DDL 最佳實踐
- 使用
pt-online-schema-change (Percona Toolkit) 無鎖變更
- 或
gh-ost (GitHub) 影子表異步同步
- 低峰期執行,預留足夠磁盤空間 (臨時表佔用)
- 監控
ALTER TABLE 進程狀態,必要時 KILL