爲什麼需要主鍵和外鍵?¶
想象我們要建一個學校的數據庫,裏面有班級表和學生表。如果沒有規則,班級數據和學生數據可能會混亂:比如學生表中寫了一個不存在的班級,或者班級重複創建。這時候,主鍵和外鍵就像“身份證”和“關係紐帶”,能幫我們理清數據關係,讓數據庫更有序。
一、主鍵(Primary Key):數據的“身份證”¶
主鍵是什麼?
主鍵是表中唯一標識每一行數據的字段,就像每個人的身份證號——不能重複,也不能爲空。它能確保表中沒有重複數據,方便快速定位某條記錄。
舉個例子:
班級表(class)需要唯一標識每個班級,我們用 class_id 作爲主鍵:
CREATE TABLE class (
class_id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主鍵,自動生成唯一ID
class_name VARCHAR(50) NOT NULL -- 班級名稱(非空)
);
AUTO_INCREMENT:自動爲新插入的班級生成唯一ID(比如1、2、3…),不用手動寫ID。PRIMARY KEY:聲明class_id是主鍵,確保每個班級的class_id唯一且非空。
二、外鍵(Foreign Key):表間的“關係紐帶”¶
外鍵是什麼?
外鍵是子表中引用父表主鍵的字段,用來建立表與表之間的關係。比如學生表需要關聯班級表,學生屬於哪個班級,就用“班級ID”(外鍵)引用班級表的“班級ID”(主鍵)。
舉個例子:
學生表(student)需要關聯班級表,用 class_id 作爲外鍵:
CREATE TABLE student (
student_id INT AUTO_INCREMENT PRIMARY KEY, -- 學生ID(主鍵)
student_name VARCHAR(50) NOT NULL, -- 學生姓名
class_id INT, -- 外鍵:關聯班級表的class_id
-- 外鍵約束:確保student的class_id必須存在於class表的class_id中
FOREIGN KEY (class_id) REFERENCES class(class_id)
);
FOREIGN KEY (class_id) REFERENCES class(class_id):聲明student表的class_id是外鍵,參考class表的class_id主鍵。- 如果插入學生時,
class_id不存在於班級表中(比如寫了class_id=99但班級表沒有這個ID),會報錯,確保數據關係正確。
三、表關係:一對多的核心邏輯¶
最常見的表關係是一對多:
- 父表:班級表(一個班級對應多個學生)。
- 子表:學生表(一個學生只屬於一個班級)。
對應關係:
- 班級表的主鍵 class_id 是“父鍵”。
- 學生表的外鍵 class_id 是“子鍵”,依賴父鍵存在。
類比:班級是“家庭”,學生是“家庭成員”,每個家庭成員的“家庭住址”(class_id)必須在“家庭名單”(班級表)中存在。
四、新手必看:注意事項¶
- 類型一致:外鍵和主鍵的數據類型必須相同(比如都是
INT),否則會報錯。 - 引擎支持:外鍵僅在
InnoDB引擎下生效(MySQL默認是InnoDB,但最好顯式聲明)。 - 父表優先:插入子表數據前,父表必須先有對應主鍵數據(比如先插入班級,再插入學生)。
五、總結¶
- 主鍵:確保表內數據唯一,是表的“身份證”。
- 外鍵:建立表間關係,是表的“關係紐帶”。
- 一對多關係中,父表主鍵與子表外鍵是核心。
學會用主鍵和外鍵,就能讓數據庫結構清晰,避免數據混亂,讓數據查詢和維護更高效!