SQL - 唯一鍵



SQL 唯一鍵

SQL 唯一鍵(或唯一約束)不允許表中某列出現重複值。它防止兩條記錄在同一列中具有相同的值。

唯一鍵只是主鍵的替代方案;因為唯一約束和主鍵約束都確保表中某列的唯一性。

假設我們有一個名為 CUSTOMERS 的表,用於儲存銀行中的客戶記錄,如果其中一列名為 MOBILE_NO,那麼我們可以在此列上建立一個唯一約束,以防止輸入具有相同手機號碼的多個記錄。

唯一鍵的特性

以下是 SQL 資料庫中唯一鍵的一些關鍵特性的列表:

  • 唯一鍵類似於表中的主鍵,但它可以接受 NULL 值,而主鍵則不能。

  • 它只接受一個 NULL 值。

  • 它不能有重複值。

  • 它也可以用作另一個表中的外部索引鍵。

  • 一個表可以有多個唯一列。

建立 SQL 唯一鍵

您可以使用 SQL 中的 UNIQUE 關鍵字在資料庫表上建立唯一鍵。建立資料庫表時,請在列(需要在此列上定義此鍵)旁邊指定此 SQL 關鍵字。

語法

以下是建立表中某列唯一鍵約束的語法:

CREATE TABLE table_name(
   column1 datatype UNIQUE KEY,
   column2 datatype,
   .....
   .....
   columnN datatype
);

示例

使用以下 SQL 查詢,我們正在建立一個名為 CUSTOMERS 的表,其中包含五個欄位 ID、NAME、AGE、ADDRESS 和 SALARY。在這裡,我們正在 ID 列上建立一個唯一鍵。

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

輸出

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

Query OK, 0 rows affected (0.03 sec)

驗證

由於我們在名為 ID 的列上建立了一個唯一約束,因此我們不能在其中插入重複值。讓我們透過將以下具有重複 ID 值的記錄插入到 CUSTOMERS 表中來進行驗證:

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

執行後,將顯示以下錯誤,證明 ID 列上確實定義了唯一約束:

ERROR 1062 (23000): Duplicate entry '1' for key 'customers.ID'

多個唯一鍵

我們可以在 SQL 表中的一列或多列上建立一個或多個唯一鍵。

語法

以下是建立表中多列唯一鍵約束的語法:

CREATE TABLE table_name(
   column1 datatype UNIQUE KEY,
   column2 datatype UNIQUE KEY,
   .....
   .....
   columnN datatype
);

示例

假設我們使用 CREATE TABLE 語句在 SQL 資料庫中建立了一個名為 CUSTOMERS 的表。如下所示,在 ID 和 NAME 列上定義了一個唯一鍵,使用了 UNIQUE 關鍵字:

CREATE TABLE BUYERS (
   ID INT NOT NULL UNIQUE KEY,
   NAME VARCHAR(20) NOT NULL UNIQUE KEY,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2)
);

輸出

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

Query OK, 0 rows affected (0.03 sec)

驗證

由於我們在名為 ID 和 NAME 的列上建立了一個唯一約束,因此我們不能在其中插入重複值。讓我們透過使用以下 INSERT 語句將重複記錄插入到 BUYERS 表中來進行驗證:

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

顯示以下錯誤:

ERROR 1062 (23000): Duplicate entry '1' for key 'customers.ID'

同樣,如果您嘗試插入另一條記錄,其 NAME 列的值與之前重複:

INSERT INTO BUYERS VALUES (2, 'Ramesh', 36, 'Chennai', 1700.00 );

將生成以下錯誤:

ERROR 1062 (23000): Duplicate entry 'Ramesh' for key 'buyers.NAME'

現有列上的唯一鍵

到目前為止,我們只看到瞭如何在建立新表時在列上定義唯一鍵。但是,我們也可以在表的現有列上新增唯一鍵。這是使用 ALTER TABLE... ADD CONSTRAINT 語句完成的。

語法

以下是建立表現有列上唯一約束的語法:

ALTER TABLE table_name ADD CONSTRAINT 
UNIQUE_KEY_NAME UNIQUE (column_name);

注意 - 這裡的 UNIQUE_KEY_NAME 只是唯一鍵的名稱。指定它是可選的,用於從表中的列刪除約束。

示例

在此示例中,我們在現有 CUSTOMERS 表的 ADDRESS 列上添加了一個唯一鍵:

ALTER TABLE CUSTOMERS ADD CONSTRAINT 
UNIQUE_ADDRESS UNIQUE(ADDRESS);

輸出

以下是上述語句的輸出:

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

刪除 SQL 唯一鍵

如果您已經在列上建立了一個唯一鍵,則可以在不需要時將其刪除。要從表的列中刪除唯一鍵,您需要使用 ALTER TABLE 語句。

語法

以下是刪除表列中唯一約束的 SQL 查詢:

ALTER TABLE table_name DROP CONSTRAINT UNIQUE_KEY_NAME;

示例

考慮上面建立的 CUSTOMERS 表,我們在名為 ID、NAME 和 ADDRESS 的三列上建立了唯一約束;透過執行以下 SQL 查詢,從 ADDRESS 列刪除唯一約束:

ALTER TABLE CUSTOMERS DROP CONSTRAINT UNIQUE_ADDRESS;

輸出

以下是上述語句的輸出:

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

驗證

現在,讓我們插入 ADDRESS 列的兩條重複記錄:

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

如果您驗證表的內容,您可以觀察到兩條記錄都具有相同的 ADDRESS,如下所示:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Ahmedabad 1500.00
廣告
© . All rights reserved.