SQL Server研习录(28)——主键与索引的关系与区别

本文深入解析SQLServer中的主键与索引概念,包括主键的唯一性和非空特性,索引的类型如唯一索引、聚集索引等,以及主键与聚集索引之间的关系和区别。同时探讨了复合主键的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.youkuaiyun.com/WXKKang

  此篇博客主要是为了将主键与索引的知识进行一个系统的总结,并将他们的关系与区别记录下来,进行一次梳理,如有错误,欢迎各位指正

一、什么是主键?

  主键(PRIMARY KEY)就像我们的身份证号一样是唯一的,如果我们将一个表中的某一列定义为了主键,那么在该表的数据中,这个字段的值就不能重复,且不可以为NULL值,主键(PRIMARY KEY)约束是数据库表中的每条记录的唯一标识
  注:若需了解主键的详细知识,请移步我的另一篇博客:SQL研习录(20)——主键约束

二、什么是索引?

  索引(INDEX)就像是一本书的目录一样,当我们想要查询一本书中与某个特定主题相关的所有页面的时候,我们会先去查询目录(索引),它按照字母表顺序列出了所有主题,然后从索引中就可以找到一页或多页与该主题相关的页面,简单来说,索引就是指向表中数据的指针
  并且索引分为:唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引、隐式索引
  注:若需了解索引的详细知识,请移步我的另一篇博客:SQL研习录(25)——索引

三、主键和聚集索引的区别

  我们知道,当我们在一张表上定义一个主键的时候,sql server会自动为它创建主键索引,它要求主键中每个值是非空并且唯一的
  那么,建立在主键之上的索引就一定是聚集索引吗?显然不是的,我们在创建表的时候就可以指定主键是否为聚集索引,代码如下:

USE [DEMO]

GO

CREATE TABLE PKCL_DEMO(
	ID INT PRIMARY KEY CLUSTERED  --聚集索引
)

GO

CREATE TABLE PKNCL_DEMO(
	ID INT PRIMARY KEY NONCLUSTERED  --非聚集索引
)

GO

DROP TABLE PKCL_DEMO
DROP TABLE PKNCL_DEMO

GO

  注:如果不添加CLUSTERED或NONCLUSTERED关键字,那么默认为聚集索引
  并且,像上面给主键指定索引,不论它是聚集索引还是非聚集索引,该列的值都是不能重复的
  但是如果该列不是主键并且该列上的索引为聚集索引,那么该列的值是可以重复的

四、复合主键的重复值

  如果一个表中有一个主键的时候,那么该列的值一定是不能重复并且不能为NULL值的
  但是一个表中的主键为多个列组成的复合主键时,其中某一列的值是可以重复的,但必须保证组成主键的这几个列的组合必须是唯一的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值