資料庫演進過程中,欄位重命名是常見維護操作。MySQL 使用 ALTER TABLE ... CHANGE 語法同時支援修改欄位名稱、資料型別與屬性。本文以實際操作示範完整流程。
ALTER TABLE <表名> CHANGE <舊欄位名> <新欄位名> <資料型別> [屬性...];
注意:即使僅改名,仍須重新指定完整資料型別與屬性(如 VARCHAR(20)),否則會導致型別遺失。
mysql> DESCRIBE test;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| t_id | int(11) | YES | | NULL | |
| t_name | varchar(20) | YES | | NULL | |
| t_password | char(32) | YES | | NULL | |
| t_birth | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
mysql> ALTER TABLE test CHANGE t_name t_name_new VARCHAR(20);
Query OK, 0 rows affected (0.11 sec)
mysql> DESCRIBE test;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| t_id | int(11) | YES | | NULL | |
| t_name_new | varchar(20) | YES | | NULL | |
| t_password | char(32) | YES | | NULL | |
| t_birth | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
VARCHAR(50) NOT NULL DEFAULT '',CHANGE 時必須完整保留 VARCHAR(50) NOT NULL DEFAULT '',否則屬性會重置。pt-online-schema-change 或 gh-ost 避免鎖表阻塞。ALTER TABLE test RENAME COLUMN t_name TO t_name_new;
僅改名時更簡潔,不需重複指定型別,推薦優先使用。
欄位重命名屬於 DDL 操作,執行前請務必備份並規劃回滾方案。掌握 CHANGE 與 RENAME COLUMN 兩種語法,可靈活應對不同版本與場景需求。