MySQL ALTER TABLE 支援 AFTER col_name 與 FIRST 關鍵字,可精確控制新欄位在表結構中的順序,方便維護邏輯分組。
ALTER TABLE tbl_name
ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name];
-- 1. 建立基礎表
CREATE TABLE t (age INT, address VARCHAR(50));
DESC t;
-- +---------+-------------+------+-----+---------+-------+
-- | Field | Type | Null | Key | Default | Extra |
-- +---------+-------------+------+-----+---------+-------+
-- | age | int(11) | YES | | NULL | |
-- | address | varchar(50) | YES | | NULL | |
-- +---------+-------------+------+-----+---------+-------+
-- 2. 在 age 之後新增 name
ALTER TABLE t ADD COLUMN name VARCHAR(20) AFTER age;
DESC t;
-- +---------+-------------+------+-----+---------+-------+
-- | age | int(11) | YES | | NULL |
-- | name | varchar(20) | YES | | NULL | ← 新欄位
-- | address | varchar(50) | YES | | NULL |
-- +---------+-------------+------+-----+---------+-------+
-- 3. 最前面新增 id
ALTER TABLE t ADD COLUMN id INT FIRST;
DESC t;
-- +---------+-------------+------+-----+---------+-------+
-- | id | int(11) | YES | | NULL | ← 新欄位
-- | age | int(11) | YES | | NULL |
-- | name | varchar(20) | YES | | NULL |
-- | address | varchar(50) | YES | | NULL |
-- +---------+-------------+------+-----+---------+-------+
SELECT * 欄位順序導致 Bug。BEFORE 關鍵字,需改用 AFTER 前一欄 達到同樣效果。