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

MySQL 新增欄位完整指南:ALTER TABLE 實戰範例

     編輯:MySQL 綜合教學

MySQL 新增欄位語法與實戰範例

在 MySQL 中修改表結構新增欄位,核心語句是 ALTER TABLE ... ADD COLUMN。本文整理常見場景的標準寫法,並說明關鍵參數含義。

基本語法結構

ALTER TABLE `table_name` 
ADD COLUMN `column_name` data_type [constraints] [FIRST | AFTER `existing_column`];
  • FIRST:將新欄位置於表的第一欄。
  • AFTER `col`:將新欄位置於指定欄位之後(推薦,保持邏輯順序)。

常見資料類型與約束範例

1. 字串類型 (VARCHAR, CHAR, TEXT)

-- 新增可空的描述欄位,置於 name 之後
ALTER TABLE `products` 
ADD COLUMN `description` VARCHAR(500) NULL AFTER `name`;

-- 新增固定長度狀態碼,預設 'A'
ALTER TABLE `orders` 
ADD COLUMN `status_code` CHAR(1) NOT NULL DEFAULT 'A' AFTER `order_date`;

2. 數值類型 (INT, DECIMAL, TINYINT)

-- 新增整數欄位,不允許為空,預設 0
ALTER TABLE `inventory` 
ADD COLUMN `stock_qty` INT UNSIGNED NOT NULL DEFAULT 0;

-- 新增精確價格欄位 (10位數字,2位小數)
ALTER TABLE `products` 
ADD COLUMN `price` DECIMAL(10,2) NOT NULL DEFAULT 0.00 AFTER `cost`;

3. 日期時間類型 (DATETIME, TIMESTAMP, DATE)

-- 新增創建時間,自動填入當前時間
ALTER TABLE `users` 
ADD COLUMN `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

-- 新增更新時間,自動更新
ALTER TABLE `users` 
ADD COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

4. 枚舉與集合 (ENUM, SET)

-- 新增狀態枚舉,預設 'pending',並建立索引加速篩選
ALTER TABLE `tasks` 
ADD COLUMN `status` ENUM('pending','running','done','failed') NOT NULL DEFAULT 'pending',
ADD INDEX `idx_status` (`status`);

5. 自增主鍵 (AUTO_INCREMENT)

-- 為現有表新增自增主鍵 (需確保表無主鍵)
ALTER TABLE `logs` 
ADD COLUMN `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);

進階場景:同時新增多欄位

ALTER TABLE `employees` 
ADD COLUMN `phone` VARCHAR(20) NULL AFTER `email`,
ADD COLUMN `hire_date` DATE NOT NULL AFTER `phone`,
ADD COLUMN `is_active` TINYINT(1) NOT NULL DEFAULT 1 AFTER `hire_date`;

注意事項與最佳實踐

  1. 大表操作風險:MySQL 5.6+ 支援 Online DDL,但大表加欄位仍可能鎖表。建議低峰期執行,或使用 pt-online-schema-change 等工具。
  2. 預設值與 NOT NULL:對於既有資料表,新增 NOT NULL 欄位必須指定 DEFAULT 值,否則報錯。
  3. 字符集一致性:新增字串欄位時,建議顯式指定 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,避免編碼不一致。
  4. 索引同步建立:若新欄位常用於 WHERE/JOIN/ORDER BY,建議在同一條 ALTER 中同步建立索引,減少鎖表次數。

驗證修改結果

-- 查看表結構確認
SHOW COLUMNS FROM `table_name`;
-- 或
DESC `table_name`;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved