📜  主键和唯一键的区别

📅  最后修改于: 2021-09-12 11:04:22             🧑  作者: Mango

先决条件 – 关系模型中的键
主键是表的一列,它唯一标识该表中的每个元组(行)。主键对表强制执行完整性约束。一个表中只允许使用一个主键。主键不接受任何重复值和 NULL 值。表中的主键值很少更改,因此在更改很少发生的地方谨慎选择。一个表的主键可以被另一表的外键引用。

为了更好地理解主键,我们将表命名为 Student 表,具有 Roll_number、Name、Batch、Phone_number、Citizen_ID 等属性。

roll number 属性永远不能有相同和 NULL 值,因为在大学注册的每个学生都可以有唯一的 Roll_number,因此两个学生不能有相同的 Roll_number,并且表中的每一行都用学生的 roll number 唯一标识。因此,在这种情况下,我们可以将 Roll_number 属性作为主键。

唯一键约束还唯一标识关系或表中的单个元组。与主键不同,一张表可以有多个唯一键。唯一键约束只能接受一个列的 NULL 值。唯一约束也被另一个表的外键引用。当有人想要对一列和一组不是主键的列强制实施唯一约束时,可以使用它。

为了更好地理解唯一键,我们采用具有 Roll_number、Name、Batch、Phone_number 和 Citizen_ID 属性的 Student 表。

Roll number 属性已经分配了主键,Citizen_ID 可以有唯一的约束,其中 Citizen_ID 列中的每个条目都应该是唯一的,因为一个国家的每个公民都必须有他或她的唯一标识号,如 Aadhaar Number。但是如果学生在这种情况下迁移到另一个国家,他或她将没有任何 Citizen_ID 并且条目可能具有 NULL 值,因为唯一约束中只允许一个 NULL。

主键和唯一键的主要区别:

主键不接受 NULL 值,而唯一键可以接受 NULL 值。

  1. 一个表只能有主键,而一个表可以有多个唯一键。
  2. 定义主键时自动创建聚集索引,而唯一键生成非聚集索引。

对比图:

Paramenter PRIMARY KEY UNIQUE KEY
Basic Used to serve as a unique identifier for each row in a table. Uniquely determines a row which isn’t primary key.
NULL value acceptance Cannot accept NULL values.
Can accepts NULL values.
Number of keys that can be defined in the table Only one primary key More than one unique key
Index Creates clustered index Creates non-clustered index