場景:user 表既有 userid 欄位(非自增),需改為自增主鍵,步驟如下:
-- 單條語句完成:修改型別、加 NOT NULL、設 AUTO_INCREMENT、設 PK
ALTER TABLE `user` CHANGE `userid` `userid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
執行後表結構變為:
CREATE TABLE `user` (
`username` VARCHAR(20) NOT NULL,
`pw` VARCHAR(20) NOT NULL,
`userid` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| 操作 | 語法範例 |
|---|---|
| 新增欄位並設 PK | ALTER TABLE t ADD new_id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (new_id); |
| 新增主鍵 | ALTER TABLE t ADD PRIMARY KEY (id); |
| 新增普通索引 | 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 t ADD col_name col_type; |
| 刪除欄位 | ALTER TABLE t DROP col_name; |
| 重命名欄位 | ALTER TABLE t CHANGE old_name new_name INT; |
| 調整欄位順序 | ALTER TABLE t CHANGE col col VARCHAR(20) NOT NULL AFTER other_col; |
| 修改欄位型別 | ALTER TABLE t CHANGE col col BIGINT NOT NULL; |
| 重命名表 | ALTER TABLE t RENAME new_t; |
| 外鍵級聯 | FOREIGN KEY (rid) REFERENCES parent(id) ON DELETE CASCADE ON UPDATE CASCADE |
注意:修改既有欄位為 AUTO_INCREMENT 時,該欄位必須為 NOT NULL 且為主鍵或唯一索引鍵的一部分;若表內已有資料,確保現有值不重複且無 0 值,否則會報錯。