MySQL 表結構變更 (DDL) 是開發、運維高頻操作。本文將 ALTER TABLE 核心語法分類整理為主鍵、欄位增刪改、重命名、索引 (普通/主鍵/唯一/刪除) 六大類,提供標準語法與實戰範例,適合列印作桌邊速查卡。
USE imss;
SELECT IF(EXISTS(
SELECT * FROM information_schema.columns
WHERE table_name='imss_righttemplate' AND column_name='id_righttemplate'
), 'yes', 'no') AS exists_flag;
-- 新增自增主鍵欄位 (針對無主鍵表)
ALTER TABLE tblname
ADD new_field_id INT(5) UNSIGNED DEFAULT 0 NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (new_field_id);
| 操作 | 標準語法 | 範例 |
|---|---|---|
| 新增欄位 | ALTER TABLE tbl ADD col TYPE [NULL|NOT NULL] [DEFAULT val]; | ALTER TABLE t2 ADD d TIMESTAMP;ALTER TABLE infos ADD ex TINYINT NOT NULL DEFAULT 0; |
| 刪除欄位 | ALTER TABLE tbl DROP COLUMN col; | ALTER TABLE t2 DROP COLUMN c; |
| 重命名欄位 | ALTER TABLE tbl CHANGE old_col new_col TYPE; | ALTER TABLE t1 CHANGE a b INTEGER; |
| 修改欄位型別/屬性 | ALTER TABLE tbl CHANGE col col NEW_TYPE [NULL|NOT NULL] [DEFAULT val]; | ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;ALTER TABLE infos CHANGE list list TINYINT NOT NULL DEFAULT 0; |
ALTER TABLE t1 RENAME TO t2;
| 類型 | 語法 | 範例 |
|---|---|---|
| 普通索引 | ALTER TABLE tbl ADD INDEX idx_name (col1[, col2...]); | ALTER TABLE tablename ADD INDEX emp_name (name); |
| 主鍵索引 | ALTER TABLE tbl ADD PRIMARY KEY (col); | ALTER TABLE tablename ADD PRIMARY KEY (id); |
| 唯一索引 | ALTER TABLE tbl ADD UNIQUE idx_name (col); | ALTER TABLE tablename ADD UNIQUE emp_name2 (cardnumber); |
| 刪除索引 | DROP INDEX idx_name ON tbl; ALTER TABLE tbl DROP INDEX idx_name; | ALTER TABLE tablename DROP INDEX emp_name; |
-- 新增
ALTER TABLE table_name ADD field_name field_type;
-- 重命名+改型別
ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
-- 刪除
ALTER TABLE table_name DROP field_name;
pt-online-schema-change 或 gh-ostDROP FOREIGN KEYALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4; 會重建表,慎用於大表idx_表名_欄位掌握 ADD/CHANGE/DROP/RENAME/INDEX 五大核心子句,覆蓋 95% 表結構變更需求。大表變更必走線上變更工具,變更前必備份、必驗證、必有回滾方案。