
- 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 的主鍵是用於唯一標識資料庫表中每條記錄的列(或列的組合)。主鍵還可以加快資料訪問速度,並用於在表之間建立關係。
儘管一個表只能有一個主鍵,但它可以在一個或多個欄位上定義。當在表的多個欄位上建立主鍵時,稱為複合鍵。
假設您正在開發一個名為“客戶管理系統”的應用程式,用於處理僅限會員度假村的所有客戶資料。這些資料可以包括他們的個人詳細資訊、分配的會員 ID、他們選擇的會員資格的其他詳細資訊等。在該資料庫中建立的所有表中,會員 ID 用於區分不同的客戶。因此,此欄位將成為主鍵。
以下是包含客戶個人詳細資訊的 CUSTOMERS 表的圖表。我們可以看到,主鍵是在 CUST_ID 列上定義的。使用此主鍵,我們可以檢索任何客戶的唯一記錄。

要點
以下是 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 |