數據庫中的主鍵(Primary Key)
主鍵是數據庫表中用于唯一標識每一行記錄的一個或多個列的組合,是關系型數據庫中的重要概念。
主鍵的核心特性
- 唯一性:主鍵值必須唯一,不能重復
- 非空性:主鍵列不能包含NULL值
- 不可變性:主鍵值一旦確定,通常不應更改(雖然技術上可以)
主鍵的作用
- 唯一標識:確保表中每一行數據都可以被唯一識別
- 提高查詢效率:數據庫會自動為主鍵創建索引
- 建立表關系:用于與其他表建立外鍵關系
- 數據完整性:防止重復數據的插入
主鍵的類型
-
自然主鍵:使用業務中自然存在的唯一標識(如身份證號、學號等)
- 優點:有意義,便于理解
- 缺點:可能變更,長度可能不理想
-
代理主鍵:使用與業務無關的字段作為主鍵(如自增ID、GUID等)
- 優點:穩定、簡單、長度固定
- 缺點:無業務意義
主鍵的實現方式
1. 單列主鍵
CREATE TABLE students (student_id INT PRIMARY KEY, -- 直接定義主鍵name VARCHAR(50)
);
2. 多列組合主鍵(復合主鍵)
CREATE TABLE course_registration (student_id INT,course_id INT,registration_date DATE,PRIMARY KEY (student_id, course_id) -- 組合主鍵
);
3. 自增主鍵(常用)
CREATE TABLE employees (emp_id INT AUTO_INCREMENT PRIMARY KEY, -- 自動遞增emp_name VARCHAR(50)
);
主鍵與索引的關系
- 主鍵會自動創建唯一索引( clustered index,聚集索引)
- 一個表只能有一個主鍵,但可以有多個唯一索引
- 主鍵索引的查詢效率通常是最高的
主鍵的最佳實踐
- 盡量使用短小的主鍵(如INT比VARCHAR更高效)
- 優先考慮代理主鍵而非自然主鍵
- 避免使用可能變更的業務字段作為主鍵
- 在InnoDB中,主鍵還影響物理存儲順序
主鍵與唯一鍵的區別
特性 | 主鍵(Primary Key) | 唯一鍵(Unique Key) |
---|---|---|
NULL值 | 不允許 | 允許(除非明確設置為NOT NULL) |
數量 | 每表只能有一個 | 每表可以有多個 |
自動創建索引 | 總是 | 總是 |
用于外鍵關系 | 可以 | 可以 |
理解主鍵的概念對于設計高效、可靠的數據庫結構至關重要。