首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL ALTER TABLE 指定位置新增欄位:AFTER 與 FIRST 關鍵字用法

     編輯:MySQL 資料庫相關知識

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    |
-- +---------+-------------+------+-----+---------+-------+

適用場景

  • 將主鍵/識別碼移至第一欄,符合慣例。
  • 將相關業務欄位群組在一起 (如 `created_at`、`updated_at` 相鄰)。
  • 避免應用程式依賴 SELECT * 欄位順序導致 Bug。

限制與補充

  • 不支援 BEFORE 關鍵字,需改用 AFTER 前一欄 達到同樣效果。
  • 大量資料表新增欄位可能鎖表,5.6+ 線上 DDL (Online DDL) 可減少封鎖,8.0 即時 DDL 更進一步。
  • 若需調整現有欄位順序,MySQL 無直接指令,需建立新表 → 複製資料 → 重命名替換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved