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

MySQL ALTER TABLE 實戰速查:欄位增刪改、索引管理、重命名與主鍵操作

     編輯:MySQL 資料庫相關知識

ALTER TABLE 常用語法速查表

所有操作均為線上 DDL (MySQL 5.6+ 支援 Online DDL),大表執行前請評估鎖影響、預留磁碟空間、低峰期執行。

欄位操作

操作語法範例備註
新增欄位ALTER TABLE t ADD col INT NOT NULL DEFAULT 0;指定位置用 FIRST / AFTER col2
刪除欄位ALTER TABLE t DROP COLUMN col;不可刪除被外鍵/索引引用的欄位
修改欄位名+類型ALTER TABLE t CHANGE old_col new_col BIGINT NOT NULL;類型不變也需完整寫出
僅修改類型ALTER TABLE t MODIFY col VARCHAR(100) NOT NULL;不支援重命名
調整欄位順序ALTER TABLE t MODIFY col INT FIRST; / AFTER other_col僅元數據操作,極快

索引與約束管理

操作語法範例備註
新增普通索引ALTER TABLE t ADD INDEX idx_name (col1, col2);索引名可省略,系統自動生成
新增唯一索引ALTER TABLE t ADD UNIQUE uk_email (email);資料有重複會報錯
新增主鍵ALTER TABLE t ADD PRIMARY KEY (id);表只能有一個 PK,欄位必須 NOT NULL
刪除索引ALTER TABLE t DROP INDEX idx_name;主鍵用 DROP PRIMARY KEY
新增外鍵ALTER TABLE child ADD CONSTRAINT fk_pid FOREIGN KEY (pid) REFERENCES parent(id);高併發慎用,建議應用層維護
刪除外鍵ALTER TABLE child DROP FOREIGN KEY fk_pid;需知約束名,可用 SHOW CREATE TABLE 查看

表級操作

  • 重命名表:ALTER TABLE old_name RENAME TO new_name; (或 RENAME TABLE old TO new;)
  • 變更儲存引擎:ALTER TABLE t ENGINE=InnoDB; (大表會重建,鎖表久,謹慎操作)
  • 修改字元集:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

進階技巧:自增主鍵重置

-- 重置自增值 (下一條插入從 1000 開始)
ALTER TABLE t AUTO_INCREMENT = 1000;

-- 批次新增帶自增的欄位 (MySQL 8.0.13+ 支援瞬時加欄位)
ALTER TABLE t ADD id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

線上 DDL 影響對照 (InnoDB)

操作類型是否複製表是否獨佔鎖備註
修改欄位類型/長度是僅準備/提交階段短暫鎖Online DDL
新增/刪除二級索引否無極快,僅掃描索引頁
新增/刪除主鍵是短暫鎖涉及聚簇索引重建
新增/刪除欄位是/否視算法而定Instant ADD COLUMN (8.0.12+) 無鎖無拷貝
RENAME TABLE否極短元數據鎖首選重命名方式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved