建表語法中出現 `PRIMARY KEY (col1, col2)`,疑惑主鍵不是只能有一個嗎?
`PRIMARY KEY (col1, col2)` 定義**單一主鍵約束**,但由**兩個欄位組合**構成。特性:
CREATE TABLE OrderItem (
OrderID INT NOT NULL,
ProductID INT NOT NULL,
Quantity INT,
PRIMARY KEY (OrderID, ProductID) -- 聯合主鍵
);
-- 合法資料
INSERT INTO OrderItem VALUES (1, 100, 2);
INSERT INTO OrderItem VALUES (1, 101, 1); -- 同 OrderID,不同 ProductID
INSERT INTO OrderItem VALUES (2, 100, 3); -- 同 ProductID,不同 OrderID
-- 違反主鍵 (組合重複)
INSERT INTO OrderItem VALUES (1, 100, 5); -- 錯誤:Duplicate key (1,100)
| 設計 | 適用場景 |
|---|---|
| 單欄主鍵 (自增 ID) | 實體識別,外鍵引用簡單 |
| 聯合主鍵 | 關聯表、多對多中間表、自然鍵組合唯一 |
| 單欄主鍵 + UNIQUE(col1, col2) | 需單欄 ID 做外鍵,同時保證組合唯一 |
主鍵**約束只能有一個**,但該約束可包含**多個欄位** (複合/聯合主鍵)。此為關聯式資料庫標準特性,廣泛用於多對多關聯表。