ALTER TABLE ... ADD COLUMN-- 基礎語法
ALTER TABLE table_name ADD COLUMN new_column_name data_type [constraints] [FIRST | AFTER existing_column];
-- 實戰範例
-- 1. 末尾新增整型欄位,預設值 0
ALTER TABLE users ADD COLUMN login_count INT DEFAULT 0;
-- 2. 指定位置:在 email 之後新增 phone
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;
-- 3. 新增非空欄位並給預設值(避免既有數據報錯)
ALTER TABLE orders ADD COLUMN status TINYINT NOT NULL DEFAULT 1;
ALTER TABLE ... DROP COLUMN-- 基礎語法
ALTER TABLE table_name DROP COLUMN column_name;
-- 實戰範例
ALTER TABLE users DROP COLUMN last_login_ip;
| 場景 | 影響 | 建議 |
|---|---|---|
| 大表加欄位 | MySQL 5.6+ 支持 Online DDL,僅元數據修改,秒級完成;5.5 需鎖表拷貝 | 生產環境確認版本,5.6+ 可直接操作 |
| 大表刪欄位 | 需重建表,鎖表時間與數據量成正比 | 採用 pt-online-schema-change 或 gh-ost 零停機變更 |
| 欄位有索引/外鍵 | 需先刪除索引/外鍵,再刪欄位 | SHOW CREATE TABLE 確認依賴關係 |
| 修改欄位類型 | 同刪欄位,需重建表 | 評估數據兼容性,分批遷移 |
mysqldump --no-data 導出結構備份。INFORMATION_SCHEMA.INNODB_TRX 確認無長事務阻塞。掌握增刪欄位語法與工具輔助,讓 Schema 演進不再是上線風險源。