標準語法
ALTER TABLE `table_name`
ADD `column_name` column_definition
[FIRST | AFTER `existing_column`];
常用範例
| 需求 | SQL 指令 |
| 末尾新增 VARCHAR 欄位附註釋 | ALTER TABLE `user` ADD `nickname` VARCHAR(32) COMMENT '暱稱'; |
| 指定位置新增 (在 email 之後) | ALTER TABLE `user` ADD `phone` VARCHAR(20) AFTER `email`; |
| 新增 NOT NULL 預設值欄位 | ALTER TABLE `user` ADD `status` TINYINT NOT NULL DEFAULT 1; |
| 新增 TIMESTAMP 自動更新 | ALTER TABLE `user` ADD `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; |
| 新增外鍵欄位並建立關聯 | ALTER TABLE `order` ADD `user_id` INT UNSIGNED NOT NULL, ADD CONSTRAINT `fk_order_user` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`); |
注意事項
COMMENT 字串需用單引號包裹,同 SQL 註釋 `--` 或 `#` 不同。
- 大表新增
NOT NULL 無預設值會報錯,必須給 DEFAULT 或先允許 NULL 更新完再改。
- MySQL 8.0+ 支援
INSTANT ADD COLUMN (僅限末尾、無預設值或預設常數),無鎖、秒級完成。
- 外鍵建立需父表主鍵型別完全一致 (含 UNSIGNED)。
驗證欄位已新增
SHOW COLUMNS FROM `user` LIKE 'nickname';
-- 或
DESC `user`;