首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主鍵操作全解析:PRIMARY KEY 與 AUTO_INCREMENT 差異、新增刪除語法與字元集調整實戰

     編輯:MySQL 資料庫相關知識

MySQL 主鍵設計直接影響資料完整性與寫入效能。本文釐清 PRIMARY KEY 與 NOT NULL AUTO_INCREMENT 的本質差異,示範主鍵新增/刪除的標準語法,並補充字元集修改的實務技巧,避免常見陷阱。

兩種主鍵模式本質差異

特性PRIMARY KEY (無 AUTO_INCREMENT)PRIMARY KEY + AUTO_INCREMENT
插入時需指定值**是**,否則預設 0 導致重複鍵錯誤**否**,自動產生遞增值
適用場景業務鍵(如 UUID、員工編號)代理鍵
重複風險高(應用層須保證唯一)極低(引擎保證)

主鍵 DDL 標準語法

新增主鍵

-- 方式 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);

刪除主鍵(含 AUTO_INCREMENT 必須先移除屬性)

-- 步驟 1:移除 AUTO_INCREMENT
ALTER TABLE tb CHANGE id id INT(10);

-- 步驟 2:刪除主鍵約束
ALTER TABLE tb DROP PRIMARY KEY;
關鍵點: MySQL 要求含 AUTO_INCREMENT 的欄位必須為索引(通常是主鍵),故刪除主鍵前必須先移除 AUTO_INCREMENT 屬性,否則報錯。

字元集修改實務(避免亂碼)

檢視現有結構

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,勿混淆主鍵語意。
  • [ ] 修改字元集前必須完整備份,驗證轉換後資料正確性。

掌握主鍵操作細節與字元集轉換技巧,能有效避免資料遺失、亂碼與效能問題,打穩資料庫設計基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved