如果我错了,请更正。请向我指出关于这个概念的文章。SQL中的主键,索引和约束条件
当我们创建一个主键时,在后台会自动创建一个唯一的索引,聚簇索引和一个非空约束。
这是否也意味着如果我们创建非空约束,[聚集索引或非聚集索引]和列上的唯一索引,那么该列将成为主键?
我想了解主键,索引和约束之间的核心概念/关系。
如果我错了,请更正。请向我指出关于这个概念的文章。SQL中的主键,索引和约束条件
当我们创建一个主键时,在后台会自动创建一个唯一的索引,聚簇索引和一个非空约束。
这是否也意味着如果我们创建非空约束,[聚集索引或非聚集索引]和列上的唯一索引,那么该列将成为主键?
我想了解主键,索引和约束之间的核心概念/关系。
主键是被声明为“主”键之一。只有具备这些特点并不能成为关键的“主要”。它必须被明确地声明。
不同的数据库以不同的方式实现主键。虽然主键通常使用聚簇唯一索引实现,但这不是必需的。
主键正是顾名思义:“主”。任何其他列或列组都可以声明为unique
和not null
。这不会使他们成为主键。在某些数据库中,甚至可以定义另一列或一组列,如not null
,unique
和集群 - 没有那个主键。
总结:
有关更多详细信息,请参阅您正在使用的数据库的文档。
如果您有多个包含非NULL唯一键的列,那么只有一列是“主” - 即已被显式声明为主键的列。
为什么你会有一个非群集主键?我可以举一个场景。设想一个数据库,其中UUID是行的关键字。该公司不希望使用自动生成的序列号,因为它们提供了号码中的信息。
但是,对于集群索引而言,UUID是非常差的候选对象,因为插入几乎不会结束。在这种情况下,您可能希望使用集群自动生成的顺序键来设计表,以加快插入速度您可以将此键设为主键。但是,您希望所有外键引用都使用UUID,并且您希望所有外键引用都是表的主键。
号
所有列可以用Not null
和Non-clustered index
和Unique
但只有ONE栏添加可以PK。
而Unique
允许NULL
而Primary Key
不允许。
你可能会谈论Candidate Key
,这里是裁判: https://www.techopedia.com/definition/21/candidate-key
Microsoft SQL SERVER – variable