- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - 插入查詢
- SQL - 選擇查詢
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查詢
- SQL - 刪除查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION 與 UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線與右連線
- SQL - Union 與 Join
- SQL 金鑰
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 複合主鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 叢集索引
- SQL - 非叢集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - Min & Max
- SQL - Null 函式
- SQL - 檢查約束
- SQL - 預設約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - Group By 與 Order By
- SQL - IN 與 EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - 複合主鍵
SQL 複合主鍵
SQL 的複合主鍵是在表中兩個或多個列上定義的鍵,用於唯一標識任何記錄。它也可以被描述為主鍵在多個列上建立。
在資料庫表中沒有單個列可以唯一標識表中每一行的場景下,複合鍵是必要的。在這種情況下,我們可能需要使用列的組合來確保表中的每個記錄都是不同的和可識別的。
讓我們用一個例子來理解複合鍵。假設我們有一個名為 CUSTOMERS 的表,其中包含各種欄位,如 ID、NAME、AGE、AADHAAR_ID、MOBILE_NO 和 SALARY,如下所示:
我們可以選擇 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 |