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