ALTER TABLE table_name action [, action ...];
單條語句可組合多個操作,用逗號分隔,效率優於多條語句。
| 操作 | 語法 | 說明 |
|---|---|---|
| 添加字段 | ADD COLUMN col_name type [constraints] | 支持 FIRST/AFTER 指定位置 |
| 刪除字段 | DROP COLUMN col_name | 不可逆,數據永久丟失 |
| 修改字段 | MODIFY COLUMN col_name new_type [constraints] | 保留數據,類型需兼容 |
| 重命名字段 | CHANGE COLUMN old_name new_name type [constraints] | 必須重新指定類型 |
| 添加主鍵 | ADD PRIMARY KEY (col_name) | 列必須 NOT NULL |
| 刪除主鍵 | DROP PRIMARY KEY | 僅能有一個主鍵 |
| 添加索引 | ADD INDEX idx_name (col_name) | 支持聯合索引 |
| 刪除索引 | DROP INDEX idx_name | 需指定索引名 |
| 重命名表 | RENAME TO new_table_name | 原子操作,鎖表時間極短 |
| 修改引擎 | ENGINE = InnoDB | 會重建表 |
| 修改字符集 | CONVERT TO CHARACTER SET utf8mb4 | 會轉換數據編碼 |
CREATE TABLE myTable (ID SMALLINT);
DESC myTable; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | smallint(6) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
ALTER TABLE myTable
ADD COLUMN Quantity SMALLINT UNSIGNED NOT NULL,
MODIFY ID SMALLINT UNSIGNED NOT NULL,
ADD PRIMARY KEY (ID);
DESC myTable; +----------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+-------+ | ID | smallint(5) unsigned | NO | PRI | | | | Quantity | smallint(5) unsigned | NO | | | | +----------+----------------------+------+-----+---------+-------+
ALTER TABLE myTable
DROP COLUMN Quantity,
DROP PRIMARY KEY;
DESC myTable; +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | ID | smallint(5) unsigned | NO | | | | +-------+----------------------+------+-----+---------+-------+
ALTER TABLE t ADD INDEX idx_c (c), ALGORITHM=INPLACE, LOCK=NONE;
pt-online-schema-change (Percona Toolkit) 實現真正無鎖變更CONVERT TO 會重寫數據,DEFAULT CHARSET 僅影響新字段ALTER TABLE 是 DDL 核心命令,掌握組合操作、算法選擇、鎖表影響與大表變更策略,是 DBA 與後端開發必備技能。