约束2:主键约束,唯一约束和唯一索引

主键约束和唯一约束都会创建唯一索引,不同之处在于主键约束的索引键在定义上不允许为NULL,而唯一约束的索引键在定义上允许为NULL;唯一约束认为索引键上的NULL值是相等的,不允许重复的NULL值出现在索引键或其组合。

1,主键约束创建唯一索引

作为Primay Key约束的列必须是唯一的,非空的,SQL Server在创建主键约束时,自动为主键列创建一个唯一索引,并且索引列不允许为null;

主键约束创建的唯一索引,可以是聚集索引(clustered),也可以是非聚集索引(nonclustered);

id int not null primary key nonclustered ,
id int not null primary key clustered ,

2,唯一约束创建唯一索引

在关系表中,唯一约束的列是唯一的,但是可以为Null;在唯一性约束中,null值是相等的。如果唯一性约束的列是单列,那么只有一行数据列能够为null;如果唯一性约束的列是多列,那么列的任意一种组合,不能相同。

SQL Server 在创建唯一性约束时,会自动创建一个唯一索引,通过clustered 或 nonclustered来指定创建的索引是聚集索引,还是非聚集索引;

id int unique nonclustered,
id int unique clustered,

3,唯一性约束和主键约束的区别

  • 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值;
  • 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的,但是,唯一性约束所在的列并不是表的主键列;
  • 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。
  • 一个表上只能有一个主键约束,但是可以有多个唯一性约束。

4,创建唯一索引

使用create unique index命令创建唯一索引

create unique nonclustered index idx_unique_id 
on dbo.test(id)
create unique clustered index cidx_unique_id
on dbo.test(id)

5,删除主键约束和唯一性约束自动创建的唯一索引

由于唯一索引是由主键约束或唯一性约束自动创建的,因此,必须删除约束,才能删除索引。

alter table dbo.table
drop constraint [PK__constraint_name]

alter table dbo.table
drop constraint [UQ__constraint_name]

 

posted @   悦光阴  阅读(3186)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示