系統整理官方文件 alter_specification 全清單,深度解析臨時表複製機制、IGNORE 唯一鍵衝突處理、索引級聯刪除規則,並以完整演進範例示範從建表到最終結構的全生命週期操作。
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [FIRST | AFTER col_name]
| ADD INDEX [index_name] (index_col_name, ...)
| ADD PRIMARY KEY (index_col_name, ...)
| ADD UNIQUE [index_name] (index_col_name, ...)
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name create_definition
| MODIFY [COLUMN] create_definition
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP INDEX index_name
| RENAME [AS] new_tbl_name
| table_options
| 機制 | 說明 |
|---|---|
| 臨時表複製 | 建立副本 → 套用變更 → 原子 RENAME 替換原表。讀不阻塞,寫延遲至新表就緒 |
| 權限需求 | SELECT, INSERT, DELETE, UPDATE, CREATE, DROP |
| IGNORE 行為 | 唯一鍵衝突:保留首筆、刪除其餘;未指定則回滾報錯 |
| 多子句單條 | MySQL 擴充,單條 SQL 可包含多個 ADD/CHANGE/DROP |
| 索引級聯 | 欄位被 DROP → 所屬索引自動移除組成欄位;所有組成欄位被 DROP → 索引自動 DROP |
| DROP PRIMARY KEY | 無 PK 時刪除首個 UNIQUE 索引(MySQL 內部將首個 UNIQUE 標記為 PK) |