主键和唯一键的区别
主键是表的一列,它唯一地标识该表中的每个元组(行)。 主键对表强制执行完整性约束。 一个表中只允许使用一个主键。 主键不接受任何重复值和 NULL
值。 表中的主键值很少更改,因此在很少发生更改的地方谨慎选择它。 一个表的主键可以被另一个表的外键引用。
为了更好地理解主键,将表命名为 Student 表,具有 Roll_number
、 Name
、 Batch
、 Phone_number
、 Citizen_ID
等属性。
Roll_number
属性永远不能有相同的和 NULL
值,因为每个在大学注册的学生都可以有唯一的 Roll_number
,因此两个学生不能有相同的 Roll_number
,并且表中的每一行都用学生的 Roll_number
唯一标识。 因此,在这种情况下,可以将 Roll_number
属性作为主键。
唯一键约束还唯一标识关系或表中的单个元组。 与主键不同,一张表可以有多个唯一键。 唯一键约束对于列只能接受一个 NULL
值。 唯一约束也被另一个表的外键引用。 当有人想要对一个列和一组不是主键的列强制执行唯一约束时,可以使用它。
为了更好地理解唯一键,使用 Student
表具有 Roll_number
、 Name
、 Batch
、 Phone_number
和 Citizen_ID
属性。
Roll_number
属性已经分配了主键,并且 Citizen_ID
可以具有唯一约束,其中 Citizen_ID
列中的每个条目都应该是唯一的,因为一个国家的每个公民都必须具有他或她的唯一标识号,例如 Aadhaar
号。 但是,如果学生在这种情况下迁移到另一个国家,那么将没有任何 Citizen_ID
,并且该条目可能具有 NULL
值,因为唯一约束中只允许一个 NULL
。
主键和唯一键之间的主要区别:
- 主键不接受 NULL 值,而唯一键可以接受 NULL 值。
- 一张表只能有一个主键,而一张表可以有多个唯一键。
- 定义主键时自动创建聚集索引,而唯一键生成非聚集索引。
主键和唯一键的区别
参数 | PRIMARY KEY | UNIQUE KEY |
---|---|---|
基本 | 用作表中每一行的唯一标识符。 | 唯一确定不是主键的行。 |
NULL值 | 不能接受 NULL 值。 | 可以接受 NULL 值。 |
定义的键数 | 只有一个主键 | 多个唯一键 |
索引 | 创建聚集索引 | 创建非聚集索引 |
自动递增 | 主键支持自动递增值。 | 唯一键不支持自动递增值。 |