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

MySQL ALTER TABLE 完整速查:欄位增刪改、重命名、索引與約束管理

     編輯:MySQL 綜合教學

通用語法骨架

ALTER TABLE `tbl_name`
    [alter_specification [, alter_specification] ...];

分類速查表

類別操作SQL 範例
表級重命名ALTER TABLE old_name RENAME TO new_name;
物理排序 (MyISAM)ALTER TABLE t ORDER BY id DESC;
欄位級新增ALTER TABLE t ADD col VARCHAR(32) AFTER other_col;
刪除ALTER TABLE t DROP col;
修改定義 (不改名)ALTER TABLE t MODIFY col INT NOT NULL DEFAULT 0;
修改名稱 + 定義ALTER TABLE t CHANGE old_col new_col INT NOT NULL;
移動位置ALTER TABLE t MODIFY col INT FIRST; / AFTER other
修改註釋ALTER TABLE t CHANGE col col INT COMMENT '新註釋';
索引級新增主鍵ALTER TABLE t ADD PRIMARY KEY (id);
新增唯一ALTER TABLE t ADD UNIQUE uk_email (email);
新增普通ALTER TABLE t ADD INDEX idx_name (name);
刪除索引ALTER TABLE t DROP INDEX idx_name;
刪除主鍵ALTER TABLE t DROP PRIMARY KEY;
約束級新增外鍵ALTER TABLE child ADD CONSTRAINT fk_c_p FOREIGN KEY (pid) REFERENCES parent(id);
刪除外鍵ALTER TABLE child DROP FOREIGN KEY fk_c_p;
新增檢查 (8.0.16+)ALTER TABLE t ADD CONSTRAINT chk_age CHECK (age >= 0);
刪除檢查ALTER TABLE t DROP CHECK chk_age;

跨資料庫語法差異 (MySQL / SQL Server / Oracle)

操作MySQLSQL ServerOracle
重命名欄位CHANGE old new defEXEC sp_rename 't.old', 'new', 'COLUMN'ALTER TABLE t RENAME COLUMN old TO new;
修改型別MODIFY col defALTER TABLE t ALTER COLUMN col INTALTER TABLE t MODIFY col INT;
新增主鍵ADD PRIMARY KEY (id)ALTER TABLE t ADD CONSTRAINT pk_t PRIMARY KEY (id)ALTER TABLE t ADD CONSTRAINT pk_t PRIMARY KEY (id)

線上 DDL (Online DDL) 關鍵參數

ALTER TABLE big_table
  ADD COLUMN new_col INT,
  ALGORITHM=INPLACE, LOCK=NONE;  -- 5.6+ 支援,無鎖、無拷貝
  • ALGORITHM=INSTANT (8.0.12+):僅元資料變更,毫秒級 (限末尾加欄、無預設值等)。
  • 強制 COPY 情況:變更欄位型別、加主鍵 (5.6)、字元集轉換、分區操作。

常見錯誤與對策

錯誤碼訊息原因解決
1025Error on rename外鍵阻礙先 DROP FOREIGN KEY
1833Cannot change column欄位參與 FK/分區移除相依後再改
Lock wait timeoutLock wait timeout exceeded長佔 MDL 鎖低峰期、ALGORITHM=INPLACE、升級 8.0
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved