Sql server SQL中的主键、索引和约束
如果我错了,请改正。请给我指出关于这个概念的文章 当我们创建一个主键时,在后台会自动创建一个唯一索引、聚集索引和在该列上创建的NOTNULL约束 这是否也意味着,如果我们在列上创建一个非null约束、[聚集索引或非聚集索引]和唯一索引,那么该列将成为主键 我想了解主键、索引和约束之间的核心概念/关系。否 所有列都可以添加Sql server SQL中的主键、索引和约束,sql-server,Sql Server,如果我错了,请改正。请给我指出关于这个概念的文章 当我们创建一个主键时,在后台会自动创建一个唯一索引、聚集索引和在该列上创建的NOTNULL约束 这是否也意味着,如果我们在列上创建一个非null约束、[聚集索引或非聚集索引]和唯一索引,那么该列将成为主键 我想了解主键、索引和约束之间的核心概念/关系。否 所有列都可以添加非空和非聚集索引和唯一,但只能添加一列 并且唯一允许空,而主键不允许 您可能正在谈论候选密钥,以下是参考: 主键是声明为“主键”的键。仅仅具备这些特征并不能使关键点成为“主要的”
非空
和非聚集索引
和唯一
,但只能添加一列
并且唯一
允许空
,而主键
不允许
您可能正在谈论候选密钥
,以下是参考:
主键是声明为“主键”的键。仅仅具备这些特征并不能使关键点成为“主要的”。必须明确声明它是这样的 不同的数据库以不同的方式实现主键。虽然主键通常使用聚集唯一索引实现,但这不是一个要求 主键正是它的名字所暗示的:“primary”。任何其他列或列组都可以声明为
唯一
和非空
。这并不使它们成为主键。在某些数据库中,您甚至可以将另一列或一组列定义为非空
、唯一
和集群,而不必将其作为主键
总之:
- 一个表上可以有任意数量的唯一索引
- 在表的非空列上可以有任意数量的唯一索引
- 您最多可以有一个聚集索引。在几乎所有情况下,这都是主键。但并非所有数据库中都需要
- 您最多可以有一个主键。在几乎所有情况下,这都是集群的,尽管并非所有数据库都需要集群
然而,UUID对于聚集索引来说是非常糟糕的候选者,因为插入几乎从不在末尾。在这种情况下,您可能希望使用集群自动生成的顺序键设计表,为了加快插入,您可以将该键设为主键。但是,您希望所有外键引用都使用UUID,并且希望所有外键引用都指向表的主键。我的问题只涉及一列。我想我是清楚的。我的问题现在有意义了吗?@variable,Gordon已经指定PK应该是显式declaredTanks。为什么反之亦然?如果我们有多个约束相同的列,你怎么知道哪一个是PK?@LONG。声明为主键的。在大多数数据库中,元数据都有这样的信息。请告诉我unique是索引还是约束?在后台,unique键是作为索引还是约束实现的?两者都有。它被实现为一个唯一的索引;但它的功能是作为一个约束,因为优化器认为它是这样的,并将使用该知识优化查询。谢谢Ross,请与我们分享任何涉及此主题的文章Microsoft SQL SERVER