主键和唯一键之间的本质区别是主键不接受NULL值,而在唯一键约束内允许NULL值。
比较依据 | 首要的关键 | 唯一键 |
---|---|---|
BASIC | 它用作表中每一行的唯一标识符。 | It also uniquely determines a row, which is not defined as a primary key. |
空值接受 | 主键将不接受空值。 | Unique will accept a NULL value. |
可以在表中定义的键数。 | 只有一个主键 | More than one |
指数 | 创建聚簇索引 | 创建非聚集索引 |
主键的定义
如果一列 唯一地标识该表中的每个元组(行),则该列可以称为表的 主键。将完整性约束应用于表。表中仅允许使用一个主键。主键不接受重复的值和NULL值。主键的选择非常谨慎,因为更改很少发生,这意味着表中的主键很少更改。
让我们借助表来了解主键的概念。在这里,我们创建了一个名为Student Table的表,该表具有Roll_number,Name,Batch,Phone_number,Citizen_ID等属性。
在给定的示例中,该属性的角色编号永远不能具有null和相同的值,因为每个入学的学生都拥有唯一的角色编号。没有两个学生可以具有相同的卷号,并且表中的每一行都用该学生的卷号唯一地标识。因此,在这种特殊情况下,我们可以使Roll_number属性成为主键。
主键可以由外键引用。 在表上创建唯一的 聚集索引。在聚集索引中,数据行根据其键值进行排序并存储在表或视图中。一个表上只能有一个聚集索引,其背后的原因是表中的数据行只能按一个顺序排序。
唯一键定义
一个主键类似, 该 限制 只重点 也发生了关系唯一标识一个元组个人。但是,它们之间存在某些差异。一个表可以具有多个唯一键。唯一键约束只能接受列的NULL值。
让我们通过类似的示例来理解这一点,在该示例中,我们有一个学生表,该表具有卷号,姓名,批次,号码和Citizen_ID属性。卷号属性分配有主键。
在这里,可以为Citizen_ID分配唯一的限制,其中Citizen_ID列中的每个条目都必须是唯一的,不能重复,因为一个国家的每个公民都必须具有其唯一的标识号。但是,在这种情况下,如果学生从另一个国家移民,则他或她将没有Citizen_ID,并且条目可能具有NULL值,因为唯一约束中允许使用NULL。
外键还引用了唯一约束。当某人想对非主键的一列和一组列强加限制时,可以使用它。与主键不同,它构建 非聚集索引 。非聚集索引的结构与数据行的结构不同。其中的每个键值条目都指向包含键值的数据行,因此它使用指针。
将属性声明为主键时,它将不接受空值。另一方面,当声明为Unique的属性可以接受NULL值时。
一个表只能有一个主键,而一个表上可以有多个唯一约束。
定义主键后,会自动创建聚簇索引。相反,Unique键生成非聚集索引。