在 MySQL 中修改表結構新增欄位,核心語句是 ALTER TABLE ... ADD COLUMN。本文整理常見場景的標準寫法,並說明關鍵參數含義。
ALTER TABLE `table_name`
ADD COLUMN `column_name` data_type [constraints] [FIRST | AFTER `existing_column`];
FIRST:將新欄位置於表的第一欄。AFTER `col`:將新欄位置於指定欄位之後(推薦,保持邏輯順序)。-- 新增可空的描述欄位,置於 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`;
-- 新增整數欄位,不允許為空,預設 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`;
-- 新增創建時間,自動填入當前時間
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;
-- 新增狀態枚舉,預設 'pending',並建立索引加速篩選
ALTER TABLE `tasks`
ADD COLUMN `status` ENUM('pending','running','done','failed') NOT NULL DEFAULT 'pending',
ADD INDEX `idx_status` (`status`);
-- 為現有表新增自增主鍵 (需確保表無主鍵)
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`;
pt-online-schema-change 等工具。NOT NULL 欄位必須指定 DEFAULT 值,否則報錯。CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,避免編碼不一致。-- 查看表結構確認
SHOW COLUMNS FROM `table_name`;
-- 或
DESC `table_name`;