首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 聯合主鍵:兩個欄位共同構成主鍵

     編輯:程式設計綜合問答

問題

建表語法中出現 `PRIMARY KEY (col1, col2)`,疑惑主鍵不是只能有一個嗎?

解釋:聯合主鍵

`PRIMARY KEY (col1, col2)` 定義**單一主鍵約束**,但由**兩個欄位組合**構成。特性:

  • **唯一性**:`(col1, col2)` 的組合值在表中唯一。單獨 `col1` 或 `col2` 可重複。
  • **非空性**:`col1`、`col2` 皆不得為 `NULL`。
  • **索引**:自動建立複合索引 `(col1, col2)`,查詢 `WHERE col1=? AND 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 做外鍵,同時保證組合唯一

結論

主鍵**約束只能有一個**,但該約束可包含**多個欄位** (複合/聯合主鍵)。此為關聯式資料庫標準特性,廣泛用於多對多關聯表。

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