在 SQL Server 中,创建表时可以直接为字段添加唯一约束(UNIQUE)
在 SQL Server 中,创建表时可以直接为字段添加唯一约束(UNIQUE
)。在 CREATE TABLE
语句中,定义字段时,可以使用 UNIQUE
关键字来确保该字段的值唯一。
语法:
CREATE TABLE your_table (
a INT UNIQUE,
-- 其他字段
);
假设你需要创建一个表 employees
,其中字段 email
需要保持唯一,可以按如下方式编写 CREATE TABLE
语句:
CREATE TABLE employees (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
name VARCHAR(100)
);
如果要为多个字段联合唯一约束,可以使用 UNIQUE
约束时指定多个字段。例如,要求 email
和 name
的组合唯一,可以如下创建表:
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);
========================================================================================
employees
============================================
在 SQL Server 中,UNIQUE
和 PRIMARY KEY
都用于确保列中的数据唯一性,但它们有一些关键的区别。下面是详细解释:
1. PRIMARY KEY
-
唯一性:
PRIMARY KEY
强制列中的值是唯一的,即在表中每行的数据在该列上不能重复。 -
不能为空:
PRIMARY KEY
自动地会确保该列不能有NULL
值。每行必须有一个唯一的值。 -
一个表只能有一个
PRIMARY KEY
:每个表只能有一个主键(通常主键可以由一个或多个列组成,称为复合主键)。 -
自动创建聚集索引:当创建
PRIMARY KEY
时,SQL Server 会自动为该列创建聚集索引。聚集索引定义了表中数据的物理存储顺序,因此PRIMARY KEY
列的值会决定表中数据的存储顺序。sql
-
CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(50) );
2. UNIQUE
-
唯一性:
UNIQUE
约束也要求列中的数据是唯一的,但它不强制列不能包含NULL
值。实际上,可以有多个NULL
值,因为NULL
被视为不等于任何值。 -
可以有多个:一个表中可以有多个
UNIQUE
约束,这样可以确保多个不同列的唯一性。 -
创建非聚集索引:与
PRIMARY KEY
不同,UNIQUE
约束会创建非聚集索引,而不会改变表数据的物理存储顺序。sql
-
CREATE TABLE Employees ( EmployeeID INT UNIQUE, Email NVARCHAR(100) UNIQUE );
总结区别
特性 | PRIMARY KEY | UNIQUE |
---|---|---|
唯一性 | 强制唯一 | 强制唯一,但允许多个 NULL 值 |
NULL 值 |
不允许 NULL |
允许多个 NULL 值 |
表中的个数 | 每个表只能有一个主键 | 每个表可以有多个唯一约束 |
索引 | 自动创建聚集索引(决定数据存储顺序) | 创建非聚集索引 |
使用场景 | 用于表的主键列,通常是表的标识列 | 用于要求唯一的数据列,但不需要作为主键的列 |
常见使用场景
- PRIMARY KEY:当你需要确保表中每一行都有一个唯一标识符时(通常是 ID 列)。
- UNIQUE:当你希望确保某个列中的数据唯一,但它不是主键时(例如,确保电子邮件地址、用户名等是唯一的)。
希望这些信息帮助你理解两者的区别!如果有其他问题,随时问我。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~