專案迭代中難免需要調整表結構。本文匯總 MySQL ALTER TABLE 添加、刪除、修改列的標準語法,並針對常見錯誤(如誤用 alert)與最佳實踐(如保留數據修改類型)給出明確建議。
| 操作 | 標準語法 | 示例 |
|---|---|---|
| 新增列 | ALTER TABLE tbl_name ADD COLUMN col_name data_type [constraints]; | ALTER TABLE users ADD COLUMN phone VARCHAR(20) DEFAULT ''; |
| 刪除列 | ALTER TABLE tbl_name DROP COLUMN col_name; | ALTER TABLE users DROP COLUMN phone; |
| 修改列(類型/屬性/重命名) | ALTER TABLE tbl_name CHANGE COLUMN old_name new_name data_type [constraints]; | ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20) NOT NULL DEFAULT ''; |
| 僅修改類型/屬性(不改名) | ALTER TABLE tbl_name MODIFY COLUMN col_name data_type [constraints]; | ALTER TABLE users MODIFY COLUMN mobile VARCHAR(30) NOT NULL DEFAULT ''; |
-- 錯誤 1:alert 非 MySQL 關鍵字
alert TABLE table_name change old_field_name new_field_name field_type;
-- 錯誤 2:DROP COLUMN 寫法不規範
alter table TableName drop column field_id; -- 可行但建議規範大小寫
-- 刪除列
ALTER TABLE TableName DROP COLUMN field_id;
-- 修改列名+類型
ALTER TABLE table_name CHANGE COLUMN old_field_name new_field_name new_data_type;
-- 僅修改類型/長度(如 VARCHAR(100) → VARCHAR(200))
ALTER TABLE table_name MODIFY COLUMN field_name VARCHAR(200);
專案運行期修改列長度/類型時,為不丟失現有數據:
MODIFY,MySQL 自動遷移數據(如 VARCHAR(50)→VARCHAR(100)、INT→BIGINT)。ALTER TABLE 可能鎖表(MySQL 5.6+ 支持 Online DDL,但仍有鎖升級風險)。mysqldump -d 結構 + SELECT INTO OUTFILE 數據)。動態修改表結構是 DBA 與開發必備技能。記住核心口訣:增用 ADD、刪用 DROP、改名改類型用 CHANGE、只改類型用 MODIFY。線上大表變更務必走工具、做備份、驗證兼容,切勿僥倖操作。