MySQL 組合鍵簡介
今天的教程是對 MySQL 組合鍵的介紹。本課還討論了使用 CREATE
和 ALTER
語句建立複合主鍵和外來鍵。
MySQL 組合鍵簡介
組合鍵是候選鍵的一種型別,它是表中多個列的組合,讓我們可以唯一地標識表的每一行。有兩種型別的組合鍵。
- 複合主鍵
- 複合外來鍵
MySQL 複合主鍵
複合主鍵是表中多個列的組合,用作主鍵,讓我們唯一地標識表的每一行。同一表中複合主鍵的各個列可以是或不能是外來鍵,它們是父表中的主鍵。
讓我們看看下面的實體關係圖 (ERD),其中我們使用列 ID
、CUSTOMER_ID
和 PRODUCT_ID
在表 tb_order
中建立複合主鍵,其中 CUSTOMER_ID
和 PRODUCT_ID
是外來鍵在列級別,但在其父表中的主鍵。
有些人可能會對 tb_order
表中鍵的顏色感到困惑,因為黃色用於主鍵,紅色表示外來鍵。要確保我們有一個複合主鍵,請單擊 tb_order
表中的單詞 PRIMARY
。
它將突出顯示製作複合主鍵所涉及的所有列(請參見以下螢幕截圖作為演示)。
MySQL 複合外來鍵
包含多個列的外來鍵稱為複合外來鍵。外來鍵中的所有欄位(也稱為屬性或列)必須指向確切的表。
我們不能建立一個複合外來鍵,其中一列引用表 A,第二列引用表 B。請參閱以下演示,其中複合外來鍵的兩列 (REFERENCE_NUMBER
& REFERENCE_TYPE
) 引用列 (ACCOUNT_NUMBER
& ACCOUNT_TYPE
) 的 accounts
表。
在 MySQL 中,只有當我們組合它們時,才能保證列的唯一性。否則,無法在個人層面上保持唯一性。
主鍵、超鍵或候選鍵也可以稱為組合鍵,如果它們是通過使用多個屬性(列)構成主鍵/外來鍵而形成的。
每當表需要唯一標識具有多列的每一行時,我們都可以使用組合鍵以達到最佳研究目的。但是,我們將用於形成組合鍵的列可以具有各種資料型別。
因此,用於製作 MySQL 組合鍵的列具有相同的資料型別不是強制性的。
在 MySQL 中建立組合鍵
在 MySQL 中,我們可以通過以下兩種方式建立複合主鍵和複合外來鍵。
- 使用
CREATE
語句 - 使用
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)
);
輸出:
tb_order
表中沒有任何主鍵。因此,我們可以在表建立後使用 ALTER
語句建立複合主鍵,因為 ALTER
語句用於修改現有表。
請記住,如果我們將 ID
作為主鍵,我們將無法建立複合主鍵,因為一張表不能有兩個主鍵。
ALTER
宣告:
ALTER TABLE `db_ms20`.`tb_order` ADD PRIMARY KEY(ID, CUSTOMER_ID, PRODUCT_ID);
輸出:
我們已經成功地建立了一個複合主鍵。
使用 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)
);
輸出:
我們在上面給出的輸出中沒有複合外來鍵。讓我們使用 ALTER
語句建立它,如下所示:
ALTER TABLE `ms20`.`sub_accounts` ADD FOREIGN KEY
(REFERENCE_NUMBER, REFERENCE_TYPE)
REFERENCES accounts
(ACCOUNT_NUMBER, ACCOUNT_TYPE);
輸出:
將此輸出與前一個輸出進行比較,觀察我們成功建立了複合外來鍵。