首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

主鍵與唯一索引本質區別:約束特性、空值處理、外鍵關聯、性能影響

     編輯:MySQL 綜合教學

核心定義

  • 主鍵 (Primary Key):唯一標識 一行數據。= 唯一索引 + NOT NULL + 單表唯一。
  • 唯一索引 (Unique Index):限制列值唯一。允許 NULL(多行 NULL 不衝突),可建多個。

對比矩陣

特性主鍵唯一索引
唯一性強制強制
允許 NULL❌ 禁止✅ 允許(多行 NULL 共存)
數量限制單表僅一個可建多個
外鍵關聯✅ 被引用目標❌ 不能被外鍵引用
聚簇索引 (InnoDB)✅ 默認聚簇索引✅ 非聚簇(二級索引),葉子存主鍵值
隱式創建無顯式 PK 時選第一個 NOT NULL Unique Key手動創建

InnoDB 存儲層面差異

  • 主鍵即數據:葉子節點存完整行數據(聚簇索引),按主鍵順序物理排序。
  • 唯一索引回表:葉子節點存 索引列值 + 主鍵值,查詢非索引列需「回表」查聚簇索引。
  • 主鍵設計原則:BIGINT AUTO_INCREMENT 遞增、無業務含義、長度固定,減少頁分裂與二級索引膨脹。

創建語法

-- 建表時
CREATE TABLE t (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) NOT NULL,
    UNIQUE KEY uk_email (email)
);

-- 事後添加
ALTER TABLE t ADD PRIMARY KEY (id);
ALTER TABLE t ADD UNIQUE KEY uk_email (email);

常見誤區

  1. 「唯一索引就是主鍵」→ 錯,主鍵語義是「標識」,唯一索引語義是「約束」。
  2. 「業務字段做主鍵」→ 危險,業務變更導致主鍵變更極其昂貴。
  3. 「聯合主鍵隨意排序」→ 順序決定聚簇索引物理順序,應按「高基數在前、範圍查詢在後」排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved