MySQL 主鍵設計直接影響資料完整性與寫入效能。本文釐清 PRIMARY KEY 與 NOT NULL AUTO_INCREMENT 的本質差異,示範主鍵新增/刪除的標準語法,並補充字元集修改的實務技巧,避免常見陷阱。
| 特性 | PRIMARY KEY (無 AUTO_INCREMENT) | PRIMARY KEY + AUTO_INCREMENT |
|---|---|---|
| 插入時需指定值 | **是**,否則預設 0 導致重複鍵錯誤 | **否**,自動產生遞增值 |
| 適用場景 | 業務鍵(如 UUID、員工編號) | 代理鍵 |
| 重複風險 | 高(應用層須保證唯一) | 極低(引擎保證) |
-- 方式 1:直接加主鍵(欄位須為 NOT NULL)
ALTER TABLE tb ADD PRIMARY KEY (id);
-- 方式 2:修改欄位屬性並加主鍵(含 AUTO_INCREMENT)
ALTER TABLE tb CHANGE id id INT(10) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (id);
-- 步驟 1:移除 AUTO_INCREMENT
ALTER TABLE tb CHANGE id id INT(10);
-- 步驟 2:刪除主鍵約束
ALTER TABLE tb DROP PRIMARY KEY;
SHOW CREATE TABLE tablename;
ALTER DATABASE maildb DEFAULT CHARACTER SET utf8;
ALTER TABLE mailtable DEFAULT CHARACTER SET utf8;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
若欄位定義為 latin1 但實際存 UTF-8 資料,直接 CONVERT 會雙重編碼導致亂碼。解法:
-- 1. 先轉為 BLOB(無編碼轉換)
ALTER TABLE t1 CHANGE c1 c1 BLOB;
-- 2. 再轉為目標字元集
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
utf8mb4、ENGINE=InnoDB。BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY。UNIQUE INDEX,勿混淆主鍵語意。掌握主鍵操作細節與字元集轉換技巧,能有效避免資料遺失、亂碼與效能問題,打穩資料庫設計基石。