在 SQL Server 中,創(chuàng)建表時可以直接為字段添加唯一約束(UNIQUE)
在 SQL Server 中,創(chuàng)建表時可以直接為字段添加唯一約束(UNIQUE)。在 CREATE TABLE 語句中,定義字段時,可以使用 UNIQUE 關(guān)鍵字來確保該字段的值唯一。
語法:
CREATE TABLE your_table (
a INT UNIQUE,
-- 其他字段
);
假設你需要創(chuàng)建一個表 employees,其中字段 email 需要保持唯一,可以按如下方式編寫 CREATE TABLE 語句:
CREATE TABLE employees (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
name VARCHAR(100)
);
如果要為多個字段聯(lián)合唯一約束,可以使用 UNIQUE 約束時指定多個字段。例如,要求 email 和 name 的組合唯一,可以如下創(chuàng)建表:
CREATE TABLE employees (
id INT PRIMARY KEY,
email VARCHAR(255),
name VARCHAR(100),
CONSTRAINT uq_email_name UNIQUE (email, name)
);
ALTER TABLE employees ADD CONSTRAINT uq_employees_SBMC UNIQUE (SBMC);
========================================================================================
在 SQL Server 中,UNIQUE 和 PRIMARY KEY 都用于確保列中的數(shù)據(jù)唯一性,但它們有一些關(guān)鍵的區(qū)別。下面是詳細解釋:
1. PRIMARY KEY
-
唯一性:
PRIMARY KEY強制列中的值是唯一的,即在表中每行的數(shù)據(jù)在該列上不能重復。 -
不能為空:
PRIMARY KEY自動地會確保該列不能有NULL值。每行必須有一個唯一的值。 -
一個表只能有一個
PRIMARY KEY:每個表只能有一個主鍵(通常主鍵可以由一個或多個列組成,稱為復合主鍵)。 -
自動創(chuàng)建聚集索引:當創(chuàng)建
PRIMARY KEY時,SQL Server 會自動為該列創(chuàng)建聚集索引。聚集索引定義了表中數(shù)據(jù)的物理存儲順序,因此PRIMARY KEY列的值會決定表中數(shù)據(jù)的存儲順序。sql
-
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(50) );
2. UNIQUE
-
唯一性:
UNIQUE約束也要求列中的數(shù)據(jù)是唯一的,但它不強制列不能包含NULL值。實際上,可以有多個NULL值,因為NULL被視為不等于任何值。 -
可以有多個:一個表中可以有多個
UNIQUE約束,這樣可以確保多個不同列的唯一性。 -
創(chuàng)建非聚集索引:與
PRIMARY KEY不同,UNIQUE約束會創(chuàng)建非聚集索引,而不會改變表數(shù)據(jù)的物理存儲順序。sql
-
CREATE TABLE Employees ( EmployeeID INT UNIQUE, Email NVARCHAR(100) UNIQUE );
總結(jié)區(qū)別
| 特性 | PRIMARY KEY | UNIQUE |
|---|---|---|
| 唯一性 | 強制唯一 | 強制唯一,但允許多個 NULL 值 |
NULL 值 |
不允許 NULL |
允許多個 NULL 值 |
| 表中的個數(shù) | 每個表只能有一個主鍵 | 每個表可以有多個唯一約束 |
| 索引 | 自動創(chuàng)建聚集索引(決定數(shù)據(jù)存儲順序) | 創(chuàng)建非聚集索引 |
| 使用場景 | 用于表的主鍵列,通常是表的標識列 | 用于要求唯一的數(shù)據(jù)列,但不需要作為主鍵的列 |
常見使用場景
- PRIMARY KEY:當你需要確保表中每一行都有一個唯一標識符時(通常是 ID 列)。
- UNIQUE:當你希望確保某個列中的數(shù)據(jù)唯一,但它不是主鍵時(例如,確保電子郵件地址、用戶名等是唯一的)。
希望這些信息幫助你理解兩者的區(qū)別!如果有其他問題,隨時問我。

浙公網(wǎng)安備 33010602011771號