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

MySQL ALTER TABLE 修改表結構完整教學:重命名、欄位增刷改、索引管理、外鍵、引擎變更、字元集轉換

     編輯:MySQL 資料庫相關知識

MySQL ALTER TABLE 全方位操作指南 (5.6+ Online DDL)

所有操作在 MySQL 5.6+ 支援 Online DDL,大表僅在準備/提交階段短暫元數據鎖,不阻塞 DML。操作前務必 DESC table 確認現狀、評估鎖影響、低峰執行。

1. 表重命名

ALTER TABLE old_name RENAME TO new_name;
-- 或
RENAME TABLE old_name TO new_name;  -- 支援多表原子重命名

2. 欄位操作

操作語法關鍵點
新增欄位ALTER TABLE t ADD col INT NOT NULL DEFAULT 0;指定位置 FIRST / AFTER col2;8.0.12+ Instant ADD COLUMN 無鎖無拷貝
刪除欄位ALTER TABLE t DROP COLUMN col;不可刪除被索引/外鍵引用的欄位,需先刪索引/外鍵
修改欄位名+型別ALTER TABLE t CHANGE old_col new_col VARCHAR(100) NOT NULL;型別不變也需完整寫出
僅修改型別/屬性ALTER TABLE t MODIFY col VARCHAR(100) NOT NULL DEFAULT '';不支援重命名
調整欄位順序ALTER TABLE t MODIFY col INT FIRST; / AFTER other_col純元數據操作,極快

3. 索引與約束管理

操作語法備註
新增普通索引ALTER TABLE t ADD INDEX idx_name (col1, col2);Online DDL,無鎖掃描建立
新增唯一索引ALTER TABLE t ADD UNIQUE uk_email (email);資料有重複會報錯,需先清理
新增主鍵ALTER TABLE t ADD PRIMARY KEY (id);涉及聚簇索引重建,大表耗時長
刪除索引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 查看

4. 表級屬性變更

  • 變更儲存引擎:ALTER TABLE t ENGINE=InnoDB; (大表重建,謹慎)。
  • 修改字元集:ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; (轉換資料,重建表)。
  • 修改自增值:ALTER TABLE t AUTO_INCREMENT = 1000;。
  • 表壓縮:ALTER TABLE t COMPRESSION='zlib'; (InnoDB 透明頁壓縮)。

5. Online DDL 鎖影響對照 (InnoDB)

操作類型演算法鎖模式備註
新增/刪除二級索引INPLACENONE極快,僅掃描索引頁
新增/刪除欄位 (Instant)INSTANTNONE8.0.12+,純元數據
修改欄位型別/長度INPLACE共享鎖 (準備/提交)大表需重建數據頁
新增/刪除主鍵COPY排他鎖 (準備/提交)聚簇索引重建,最慢
CONVERT TO CHARSETCOPY排他鎖全表重建轉換資料
RENAME TABLEINPLACE元數據鎖 (極短)首選重命名方式

6. 實戰建議

  1. 大表變更**先在測試環境驗證耗時/鎖影響**。
  2. 使用 pt-online-schema-change (Percona Toolkit) 實現真正無鎖變更 (觸發器同步)。
  3. 變更前 SHOW CREATE TABLE 保存結構,變更後對比驗證。
  4. 監控 INNODB_METRICS / performance_schema.events_statements_current 觀察進度。
  5. 避免業務高峰期,預留足夠磁碟空間 (重建需 1.5~2 倍表大小)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved