首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL ALTER TABLE ADD COLUMN 指定位置:FIRST 與 AFTER 實戰語法

     編輯:MySQL 綜合教學

MySQL ALTER TABLE ADD COLUMN 指定位置:FIRST 與 AFTER 實戰語法

MySQL 支援在 ALTER TABLE ... ADD COLUMN 時指定新欄位位置,這在調整表結構、保持邏輯欄序對齊時非常有用。本文說明語法、範例與注意事項。

語法

ALTER TABLE `table_name` 
ADD [COLUMN] `col_name` `column_definition` 
[FIRST | AFTER `existing_col_name`];

關鍵字說明

  • FIRST:新欄位插入為**第一欄**
  • AFTER `col_name`:新欄位插入在指定現有欄位**之後**
  • ❌ **不支援 BEFORE`**,若要插在某欄位前,只能用 AFTER` 該欄位的前一欄,或重建表。

實戰範例

-- 原表結構
CREATE TABLE `test` (
  `a` INT(11) NOT NULL,
  `b` VARCHAR(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 1. 在欄位 a 之後新增欄位 c
ALTER TABLE `test` ADD COLUMN `c` INT NOT NULL AFTER `a`;
-- 新結構:a, c, b

-- 2. 在第一欄新增自增主鍵 id
ALTER TABLE `test` ADD COLUMN `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
-- 新結構:id, a, c, b

驗證欄位順序

DESC `test`;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| a     | int(11)          | NO   |     | NULL    |                |
| c     | int(11)          | NO   |     | NULL    |                |
| b     | varchar(200)     | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

注意事項與避坑

場景影響建議
大表加欄位指定位置MySQL 5.6+ 支援 Online DDL,但指定位置**強制重建表**(COPY 算法),會鎖表、佔用臨時空間大表優先 AFTER` 最後一欄`(INPLACE 算法,無鎖),或使用 pt-online-schema-change
加入 NOT NULL 無預設值表有資料時會報錯加 DEFAULT 值 或先加 NULL 後再 MODIFY NOT NULL
自增主鍵加 FIRST會重新排列所有行的物理順序確認業務不依賴物理行序(通常不依賴)
外鍵/觸發器/視圖依賴重建表可能導致失效先刪除依賴物件,變更後重建

對比:其他資料庫支援度

資料庫支援指定位置語法
MySQL✅FIRST | AFTER col
PostgreSQL❌僅能加在最後,調整須重建表
SQL Server❌僅能加在最後
Oracle❌12c+ 支援 INVISIBLE 欄位,但無順序調整
SQLite❌僅能加在最後
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved