MySQL 組合鍵簡介

Mehvish Ashiq 2023年1月30日 2022年5月13日
  1. MySQL 組合鍵簡介
  2. 在 MySQL 中建立組合鍵
MySQL 組合鍵簡介

今天的教程是對 MySQL 組合鍵的介紹。本課還討論了使用 CREATEALTER 語句建立複合主鍵和外來鍵。

MySQL 組合鍵簡介

組合鍵是候選鍵的一種型別,它是表中多個列的組合,讓我們可以唯一地標識表的每一行。有兩種型別的組合鍵。

  1. 複合主鍵
  2. 複合外來鍵

MySQL 複合主鍵

複合主鍵是表中多個列的組合,用作主鍵,讓我們唯一地標識表的每一行。同一表中複合主鍵的各個列可以是或不能是外來鍵,它們是父表中的主鍵。

讓我們看看下面的實體關係圖 (ERD),其中我們使用列 IDCUSTOMER_IDPRODUCT_ID 在表 tb_order 中建立複合主鍵,其中 CUSTOMER_IDPRODUCT_ID 是外來鍵在列級別,但在其父表中的主鍵。

mysql 組合鍵介紹——erd

有些人可能會對 tb_order 表中鍵的顏色感到困惑,因為黃色用於主鍵,紅色表示外來鍵。要確保我們有一個複合主鍵,請單擊 tb_order 表中的單詞 PRIMARY

它將突出顯示製作複合主鍵所涉及的所有列(請參見以下螢幕截圖作為演示)。

mysql 組合鍵介紹——高亮複合主鍵

MySQL 複合外來鍵

包含多個列的外來鍵稱為複合外來鍵。外來鍵中的所有欄位(也稱為屬性或列)必須指向確切的表。

我們不能建立一個複合外來鍵,其中一列引用表 A,第二列引用表 B。請參閱以下演示,其中複合外來鍵的兩列 (REFERENCE_NUMBER & REFERENCE_TYPE) 引用列 (ACCOUNT_NUMBER & ACCOUNT_TYPE) 的 accounts 表。

mysql 組合鍵介紹——高亮複合外來鍵

在 MySQL 中,只有當我們組合它們時,才能保證列的唯一性。否則,無法在個人層面上保持唯一性。

主鍵、超鍵或候選鍵也可以稱為組合鍵,如果它們是通過使用多個屬性(列)構成主鍵/外來鍵而形成的。

每當表需要唯一標識具有多列的每一行時,我們都可以使用組合鍵以達到最佳研究目的。但是,我們將用於形成組合鍵的列可以具有各種資料型別。

因此,用於製作 MySQL 組合鍵的列具有相同的資料型別不是強制性的。

在 MySQL 中建立組合鍵

在 MySQL 中,我們可以通過以下兩種方式建立複合主鍵和複合外來鍵。

  1. 使用 CREATE 語句
  2. 使用 ALTER 語句

使用 CREATE 語句建立複合主鍵

我們將在使用 MySQL 複合主鍵中提供的相同資料庫建立的表中建立一個複合主鍵。

程式碼:

CREATE TABLE `db_ms20`.`tb_order` (
    ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    PRODUCT_ID INT NOT NULL,
    CONSTRAINT FK_CUSTOMER_ID FOREIGN KEY (CUSTOMER_ID)
    REFERENCES tb_customer(ID),
    CONSTRAINT FK_PRODUCT_ID FOREIGN KEY (PRODUCT_ID)
    REFERENCES tb_product(ID),

    PRIMARY KEY (ID, CUSTOMER_ID, PRODUCT_ID)
);

使用 CREATE 語句建立複合外來鍵

接下來,我們使用相同的資料庫來建立上面在 MySQL 複合外來鍵 中介紹的複合外來鍵。

程式碼:

CREATE TABLE `ms20`.`sub_accounts` (
   SUB_ACCOUNT INTEGER PRIMARY KEY,
   REFERENCE_NUMBER INTEGER NOT NULL,
   REFERENCE_TYPE INTEGER NOT NULL,
   SUB_ACC_DESCRIPTION CHAR(20),

   FOREIGN KEY (REFERENCE_NUMBER, REFERENCE_TYPE)
   REFERENCES accounts
   (ACCOUNT_NUMBER, ACCOUNT_TYPE)
);

使用 ALTER 語句建立複合主鍵

假設我們已經建立了名為 tb_order 的表。

程式碼:

CREATE TABLE `db_ms20`.`tb_order` (
    ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    PRODUCT_ID INT NOT NULL,
    CONSTRAINT FK_CUSTOMER_ID FOREIGN KEY (CUSTOMER_ID)
    REFERENCES tb_customer(ID),
    CONSTRAINT FK_PRODUCT_ID FOREIGN KEY (PRODUCT_ID)
    REFERENCES tb_product(ID)
);

輸出:

mysql 組合鍵介紹-使用 alter 的複合主鍵第一部分

tb_order 表中沒有任何主鍵。因此,我們可以在表建立後使用 ALTER 語句建立複合主鍵,因為 ALTER 語句用於修改現有表。

請記住,如果我們將 ID 作為主鍵,我們將無法建立複合主鍵,因為一張表不能有兩個主鍵。

ALTER 宣告:

ALTER TABLE `db_ms20`.`tb_order` ADD PRIMARY KEY(ID, CUSTOMER_ID, PRODUCT_ID);

輸出:

mysql 組合鍵介紹-使用 alter 的複合主鍵第二部分

我們已經成功地建立了一個複合主鍵。

使用 ALTER 語句建立複合外來鍵

假設我們建立了一個名為 sub_accounts 的表。

程式碼:

CREATE TABLE `ms20`.`sub_accounts` (
   SUB_ACCOUNT INTEGER PRIMARY KEY,
   REFERENCE_NUMBER INTEGER NOT NULL,
   REFERENCE_TYPE INTEGER NOT NULL,
   SUB_ACC_DESCRIPTION CHAR(20)
);

輸出:

mysql 組合鍵介紹-使用 alter 的複合外來鍵第一部分

我們在上面給出的輸出中沒有複合外來鍵。讓我們使用 ALTER 語句建立它,如下所示:

ALTER TABLE `ms20`.`sub_accounts` ADD FOREIGN KEY
(REFERENCE_NUMBER, REFERENCE_TYPE)
REFERENCES accounts
(ACCOUNT_NUMBER, ACCOUNT_TYPE);

輸出:

mysql 組合鍵介紹-使用 alter 的複合外來鍵第二部分

將此輸出與前一個輸出進行比較,觀察我們成功建立了複合外來鍵。

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook