SQL - 主鍵



SQL 主鍵

SQL 的主鍵是用於唯一標識資料庫表中每條記錄的列(或列的組合)。主鍵還可以加快資料訪問速度,並用於在表之間建立關係。

儘管一個表只能有一個主鍵,但它可以在一個或多個欄位上定義。當在表的多個欄位上建立主鍵時,稱為複合鍵

假設您正在開發一個名為“客戶管理系統”的應用程式,用於處理僅限會員度假村的所有客戶資料。這些資料可以包括他們的個人詳細資訊、分配的會員 ID、他們選擇的會員資格的其他詳細資訊等。在該資料庫中建立的所有表中,會員 ID 用於區分不同的客戶。因此,此欄位將成為主鍵。

以下是包含客戶個人詳細資訊的 CUSTOMERS 表的圖表。我們可以看到,主鍵是在 CUST_ID 列上定義的。使用此主鍵,我們可以檢索任何客戶的唯一記錄。

Primary Key

要點

以下是 PRIMARY KEY 的一些要點:

  • 它只包含唯一值。

  • 它不能為 null。

  • 一個表只能有一個主鍵。

  • 主鍵長度不能超過 900 位元組。

建立 SQL 主鍵

使用CREATE TABLE 語句建立表時,只需透過指定列名以及關鍵字“PRIMARY KEY”即可在表的特定列上新增主鍵約束。

語法

以下是將表的列定義為主鍵的語法:

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

示例

在以下示例中,我們嘗試在 SQL 資料庫中建立一個名為 CUSTOMERS 的表,其中包含各種欄位。在建立表時,我們將在名為 ID 的列上新增約束“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),       
   PRIMARY KEY (ID)
);

輸出

以下是上述 SQL 語句的輸出:

Query OK, 0 rows affected (0.03 sec)

驗證

我們知道主鍵值必須唯一,因此您不能插入具有相同 ID 的記錄。在這裡,我們將透過插入具有重複 ID 值的記錄來驗證在 ID 列上建立的約束。

首先,讓我們向 CUSTOMERS 表中插入一條記錄:

INSERT INTO CUSTOMERS VALUES
(3, 'Kaushik', 23, 'Kota', 2000.00); 

現在,讓我們再插入一條具有相同 ID 的記錄:

INSERT INTO CUSTOMERS VALUES 
(3, 'Chaitali', 25, 'Mumbai', 6500.00);

如上所述,如果資料庫表中的任何欄位/列被定義為主鍵,則兩條記錄不能在該列/欄位中具有相同的值。因此,第二個插入語句會生成以下錯誤:

ERROR 1062 (23000): Duplicate entry '3' for key 'customers.PRIMARY'

類似地,主鍵列不能包含 null 值。在這裡,我們使用 INSERT 語句將 NULL 值傳遞給主鍵列 (ID)。

INSERT INTO CUSTOMERS VALUES
(NULL, 'Komal', 22, 'Hyderabad', 4500.00); 

此語句會生成以下錯誤:

ERROR 1048 (23000): Column 'ID' cannot be null

在現有列上建立主鍵

我們還可以使用ALTER TABLE語句在表的現有列上新增 PRIMARY KEY 約束。

語法

以下是建立現有列上的主鍵約束的語法:

ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY (column_name);

示例

在此示例中,我們在現有 CUSTOMERS 表的 NAME 列上新增 PRIMARY KEY 約束:

ALTER TABLE CUSTOMERS ADD CONSTRAINT PRIMARY KEY(NAME);

輸出

以下是上述語句的輸出:

Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

刪除 SQL 主鍵

如果可以在表的列中新增主鍵約束,則也可以刪除它。這是透過使用 ALTER TABLE... DROP 語句完成的。

語法

以下是 ALTER TABLE 語句的語法,可用於從表的列中刪除主鍵約束:

ALTER TABLE table_name DROP PRIMARY KEY;

示例

讓我們考慮 CUSTOMERS 表,我們已在名為 ID 的列上建立了主鍵約束。您可以透過執行以下語句從列 ID 中刪除此約束:

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

輸出

上述 SQL 查詢產生以下輸出:

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

驗證

由於我們已從名為 ID 的列中刪除了主鍵,因此我們可以插入多條具有相同 ID 的記錄。以下語句插入四條具有相同 ID 的記錄:

INSERT INTO CUSTOMERS VALUES 
(3, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(3, 'Hardik', 27, 'Bhopal', 8500.00 ),
(3, 'Komal', 22, 'Hyderabad', 4500.00 ),
(3, 'Muffy', 24, 'Indore', 10000.00 );

如果您驗證此表的內容,則可以找到多條具有相同 ID 的記錄:

SELECT * FROM CUSTOMERS;

表將顯示為:

ID 姓名 年齡 地址 薪資
3 Kaushik 23 Kota 2000.00
3 Chaitali 25 孟買 6500.00
3 Hardik 27 博帕爾 8500.00
3 Komal 22 海德拉巴 4500.00
3 Muffy 24 因多爾 10000.00
廣告