SQL - 複合主鍵



SQL 複合主鍵

SQL 的複合主鍵是在表中兩個或多個列上定義的鍵,用於唯一標識任何記錄。它也可以被描述為主鍵在多個列上建立。

在資料庫表中沒有單個列可以唯一標識表中每一行的場景下,複合鍵是必要的。在這種情況下,我們可能需要使用列的組合來確保表中的每個記錄都是不同的和可識別的。

讓我們用一個例子來理解複合鍵。假設我們有一個名為 CUSTOMERS 的表,其中包含各種欄位,如 ID、NAME、AGE、AADHAAR_ID、MOBILE_NO 和 SALARY,如下所示:

Alternate

我們可以選擇 AADHAAR_ID 和 MOBILE_NO 兩個列,並在它們上面定義一個複合鍵,它可以用來唯一地獲取 CUSTOMERS 表的記錄。

複合鍵的特徵

以下是 SQL 複合鍵的一些重要特徵:

  • 可以透過組合多個候選鍵來建立複合鍵。
  • 構成複合鍵的每個候選鍵(或列)可以是也可以不是外部索引鍵。但是,如果複合鍵的所有列本身都是外部索引鍵,則該複合鍵稱為組合鍵。
  • 複合鍵不能為 NULL;即複合鍵的任何列都不能包含 NULL 值。
  • 構成複合鍵的各個列可以包含重複值,但是這些列的組合在整個資料庫表中必須是唯一的。

語法

以下是建立表時建立 SQL 複合鍵的語法:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   CONSTRAINT composite_key_name,
   PRIMARY KEY(column_name)
);

這裡,composite_key_name 是可選佔位符,它儲存表中複合鍵的名稱。它用於在某些資料庫中從表中刪除約束時使用。

示例

在以下示例中,我們正在建立一個名為 CUSTOMERS 的表,其中包含多個列。當在 ID 和 NAME 列上一起定義 PRIMARY KEY 時,建立複合鍵。請檢視下面的查詢:

CREATE TABLE CUSTOMERS(
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   CONSTRAINT ck_customers 
   PRIMARY KEY (ID, NAME)
);

其中,ck_customers 是該表的複合鍵的名稱。

輸出

以下是上述語句的輸出:

Query OK, 0 rows affected (0.02 sec)

驗證

由於我們在 CUSTOMERS 表的 ID 和 NAME 列上建立了一個複合鍵,因此這些列中值的組合不能重複。為了驗證它,讓我們在 CUSTOMERS 表中插入兩條具有相同值的記錄:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(1, 'Ramesh', 25, 'Delhi', 1500.00 );

您可以觀察到第二個 INSERT 語句生成一條錯誤訊息,提示“Duplicate entry”(重複條目),如下所示:

ERROR 1062 (23000): Duplicate entry '1-Ramesh' for key 'customers.PRIMARY'

在 MySQL 中刪除複合主鍵

您可以使用ALTER TABLE... DROP 語句從 MySQL 資料庫中的表中刪除複合鍵。

語法

以下是 MySQL 中刪除複合鍵的語法:

ALTER TABLE table_name DROP PRIMARY KEY;

示例

使用以下 SQL 語句,我們可以從 CUSTOMERS 表中刪除複合鍵約束:

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

輸出

上述 SQL 語句產生以下輸出:

Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

驗證

由於我們已從 CUSTOMERS 表中刪除了複合鍵,因此現在您可以在 ID 和 NAME 列中插入重複值。

讓我們在 CUSTOMERS 表中插入兩條具有相同 ID 和 NAME 的記錄:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 25, 'Delhi', 1500.00 ),
(1, 'Ramesh', 23, 'Kota', 2000.00 );

如果您檢索 CUSTOMERS 表的內容,您可以找到具有相同 ID 和 NAME 的記錄,如下所示:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
1 Ramesh 25 Delhi 1500.00
1 Ramesh 23 Kota 2000.00

在 SQL Server 中刪除複合主鍵

在 SQL Server 中,我們有不同的語法來刪除表的複合鍵。語法幾乎相同,但我們只需要指定複合鍵名稱才能刪除它,而不是關鍵字 PRIMARY KEY。

語法

以下是 SQL Server 中刪除複合鍵的語法:

ALTER TABLE table_name DROP composite_key_name;

示例

假設在 CUSTOMERS 表的 ID 和 NAME 列上建立了一個複合鍵“ck_customers”,我們將使用以下查詢來刪除它:

ALTER TABLE CUSTOMERS DROP ck_customers;

輸出

當我們執行上述查詢時,複合鍵將被刪除。

Commands completed successfully.

驗證

要驗證我們是否已從 CUSTOMERS 表中刪除了複合鍵,請使用以下查詢在 ID 和 NAME 列中插入重複值:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 25, 'Delhi', 1500.00 ),
(1, 'Ramesh', 23, 'Kota', 2000.00 );

正如我們在下表中看到的,這兩個客戶都具有相同的 ID 和 NAME:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
1 Ramesh 25 Delhi 1500.00
1 Ramesh 23 Kota 2000.00
廣告

© . All rights reserved.