ALTER TABLE news MODIFY COLUMN title VARCHAR(130);
ALTER TABLE address MODIFY COLUMN city CHAR(30);
ALTER TABLE sms_billbook_tj CHANGE tj_type tj_type VARCHAR(100);
-- 同名時等同 MODIFY
ALTER TABLE tbl
MODIFY COLUMN col1 VARCHAR(100),
MODIFY COLUMN col2 INT UNSIGNED,
CHANGE COLUMN old_name new_name BIGINT;
pt-online-schema-change。| 操作 | SQL 範例 | 備註 |
|---|---|---|
| 刪除欄位 | ALTER TABLE t DROP col; | |
| 新增欄位 | ALTER TABLE t ADD col INT NOT NULL COMMENT '說明'; | 可加 FIRST / AFTER col2 指定位置 |
| 修改欄位型別/屬性 | ALTER TABLE t CHANGE col col BIGINT NOT NULL COMMENT '說明'; | 同名即為修改屬性 |
| 重命名欄位 | ALTER TABLE t CHANGE old_col new_col INT; | |
| 重命名表 | ALTER TABLE old_t RENAME new_t; | 等同 RENAME TABLE old_t TO new_t; |
| 刪除主鍵 | ALTER TABLE t DROP PRIMARY KEY; | 需先刪除 AUTO_INCREMENT |
| 新增主鍵 | ALTER TABLE t ADD PRIMARY KEY (id); | 或複合主鍵 (a,b) |
| 新增普通索引 | ALTER TABLE t ADD INDEX idx_name (name); | |
| 新增唯一索引 | ALTER TABLE t ADD UNIQUE uk_card (card_no); | |
| 刪除索引 | ALTER TABLE t DROP INDEX idx_name; | |
| 新增外鍵 | ALTER TABLE child ADD CONSTRAINT fk_pid FOREIGN KEY (pid) REFERENCES parent(id); | 需父表有索引 |
| 刪除外鍵 | ALTER TABLE child DROP FOREIGN KEY fk_pid; | |
| 修改表選項 | ALTER TABLE t ENGINE=InnoDB ROW_FORMAT=DYNAMIC CHARSET=utf8mb4; | 觸發全表重建 |
ALGORITHM=INSTANT(如加欄位、刪除虛擬欄位),無需複製表。SHOW CREATE TABLE tbl\G
DESC tbl;
SHOW INDEX FROM tbl;
MODIFY COLUMN 改型別/長度,CHANGE COLUMN 改名+改型別,索引/主鍵/外鍵有專屬子句。大表變更**務必評估鎖表時間**,優先使用線上變更工具,並做好回滾預案。