有些人可能对主键和聚集索引有所混淆,其实这两个是不同的概念,下面是一个简单的描述。不想看绕口文字者,直接看两者的对比表。尤其是最后一项的比较。

主键(PRIMARY KEY )

来自MSDN的描述:

表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。

一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。

如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。

创建主键时,数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。

聚集索引

聚集索引基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。

每个表几乎都对列定义聚集索引来实现下列功能:

  • 可用于经常使用的查询。
  • 提供高度唯一性。

两者的比较

下面是一个简单的比较表

  主键 聚集索引
用途 强制表的实体完整性 对数据行的排序,方便查询用
一个表多少个 一个表最多一个主键 一个表最多一个聚集索引
是否允许多个字段来定义 一个主键可以多个字段来定义 一个索引可以多个字段来定义
     
是否允许 null 数据行出现 如果要创建的数据列中数据存在null,无法建立主键。
创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。
没有限制建立聚集索引的列一定必须 not null .
也就是可以列的数据是 null
参看最后一项比较
是否要求数据必须唯一 要求数据必须唯一 数据即可以唯一,也可以不唯一。看你定义这个索引的 UNIQUE 设置。
(这一点需要看后面的一个比较,虽然你的数据列可能不唯一,但是系统会替你产生一个你看不到的唯一列)
     
创建的逻辑 数据库在创建主键同时,会自动建立一个唯一索引。
如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引
如果未使用 UNIQUE 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。
必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。

参考:

下面这个帖子中大力的回复:
http://topic.csdn.net/t/20021212/16/1255429.html


文章来源:http://blog.joycode.com/ghj/archive/2008/01/04/113373.aspx

转载于:https://www.cnblogs.com/HappyQQ/articles/1026530.html

[导入]SQL Server 索引基础知识(4)----主键与聚集索引相关推荐

  1. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引

    我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...

  2. 主键、聚集索引、非聚集索引区别

    下面是一个简单的比较表   主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索引 是否允许多个字段来定义 一个主键可以多个字段 ...

  3. 主键与聚集索引的区别

    主键可为聚集索引也可为非聚集索引. 两者的比较 下面是一个简单的比较表   主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索 ...

  4. SQL Server数据库基础知识汇总

    目录 目录 一.数据库概念 1.1 什么是数据库 1.2 为什么用数据库 1.3 数据库的发展历史 1.4 数据库分类 1.5 DBMS数据库管理系统 二. SQL(Structured Query ...

  5. SQL - server 数据库基础知识

    SQL:Structured Quety Language SQL SERVER是一个以客户/服务器(c/s)模式访问.使用Transact-SQL语言的关系型数据库管理子系统(RDBMS) DBMS ...

  6. 数据库开发基本操作-SQL Server数据库基础知识

    数据库是一个信息系统应用程序的重要组成部分,在Web开发中,应用更加广泛,要学习好Web开发和ADO.NET,就必须对数据库有一定的了解. 数据库的概念很广,可以从很多方面进行解释.但是在计算机中,它 ...

  7. SQL Server 创建约束图解 唯一 主键

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创 ...

  8. 两个主键怎么设置tsql_如何在sql server中设置两个主键?

    展开全部 主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在e68a8462616964757a686964616f31333365633938一张表中的记录值是唯一 ...

  9. 4 SQL server(定义表的主键 外键 ,记录增删改查)

    目录 1. 主键和外键 1.1  通过管理工具创建外键​ 1.2 通过脚本创建外键关联 2 新增表记录 2.1 图形界面 新增记录: 2.2 SQL脚本新增记录: 2.2.1 插入单条记录 ​ 2.2 ...

  10. SQL server 去重复!要主键!要排序!

    在SQL里,似乎去重复又要主键还要排序,那是不可能实现的:但是我把不可能,变成了可能:我做了这么久开发这个问题一直困扰着我,今天把它给解决了,分享给大家学习: SELECT  * FROM    ( ...

最新文章

  1. mysql 学习笔记(二)
  2. SQL Server-聚焦深入理解动态SQL查询(三十二)
  3. 人工玻璃体-技术指标汇总(持续更新中)
  4. 输入序列不连续的序列检测
  5. python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?
  6. 微软2014编程之美初赛第一场——题目3 : 活动中心
  7. 多路查找树之2-3树的删除原理
  8. 如何评估一个ECG分析算法或设备
  9. 矩阵论作业1,2,3讲
  10. 「 C++ MFC 」“设置线程运行多媒体定时器”教程
  11. readelf命令解析及演示
  12. SCT2620MRER,替代TP54240,TPS54260,3.8V-60V Vin,2.5A,高效、频率可调、降压DCDC转换器
  13. android桌面,Android Q带来全新桌面模式
  14. DevExpress v18.2版本亮点——Reporting篇(三)
  15. 7个实战技巧帮你提升前端技术水平!
  16. DataOps: A New Discipline 数据治理的下一步
  17. 一种人机交互界面工效评价方法
  18. 第五次实验:简单的使用示波器
  19. Picture-In-Picture 画中画模式
  20. 深度残差学习的图像识别

热门文章

  1. GBTD(Gradient Boosting Decision Tree)学习
  2. spring boot 拦截器 或 Spring AOP 方式记录请求日志
  3. 迄今为止最全:Oracle WebLogic Server产品版本介绍
  4. 转DateTimePicker 控件的使用
  5. 电脑老是自动重启怎么回事??
  6. MOSS搜索的爬网错误【访问被拒绝。请验证默认内容访问账户是否有权访问此库】...
  7. 48V自动启停的Stateflow应用
  8. 解压速度更快, Zstandard 1.4.1 发布
  9. 把grid第一列设置为行号
  10. 非spring boot (即spring) 使用/集成 Spring cloud Config 分布式配置中心