主键和唯一约束之间的主要区别是什么?
What are the main differences between a primary key and a unique constraint?
我回答说表只有一个主键,但可以有许多唯一约束。
但还有什么?
主列永远不能为空,唯一列可以。
我能想到的一些差异:
- Primary Key 不能为 null,而 unique 将允许一个 null 值。
- 一个 table 上可以有多个唯一键,但只能有一个主键。
部分摘自维基百科 - Unique key - Differences from primary key constraints:
主键约束
- A Primary Key cannot allow null(不能在允许空值的列上定义主键)。
- 每个table不能有一个以上的主键。
- 在某些 RDBMS 上,主键默认生成聚簇索引。
唯一约束
- 可以在允许空值的列上定义唯一约束。
- 每个 table 可以有多个唯一键。
- 在某些 RDBMS 上,唯一键默认生成非聚集索引。
很难说面试官可能一直在寻找什么。有很多选择。
在标准 SQL 中,声明的约束 primary key
和声明的约束 not null unique
在逻辑级别 上的行为相同 。例如,这两者都可以成为外键引用的目标。面试官可能想知道 null
如何融入其中。裸 unique
约束允许空值;主键约束隐式声明 T-SQL.
中的每一列 not null
或者面试官可能一直在看你是否区分了独特的 constraint 和独特的 index。 AFAIK,每个 dbms 通过使用唯一索引来实现唯一约束。但是约束在逻辑层面上表达了数据库的一些东西,而唯一索引在物理层面上表达了数据库的一些东西。
SQL 特别是服务器
面试官可能想知道您是否知道某些计算列(但不是全部)可以被索引。 (那是一个远射。)
也许面试官想看看你能不能谈谈聚类。在 SQL 服务器中,主键约束默认为 clustered
,但索引默认为 nonclustered
。
也许面试官想看看你是否会说任何关于权限的事情。添加约束通常需要比添加索引更广泛的权限。
UNIQUE 约束 和主键 之间的区别是每个table 你可能只有一个主键但您可以定义多个 UNIQUE 约束。主键约束是不可为空。 UNIQUE 约束可以是 nullable。
当您创建一个 UNIQUE 约束时,数据库会自动创建一个 UNIQUE 索引。对于 MS SQL 服务器数据库,PRIMARY KEY 将生成唯一的 CLUSTERED INDEX。 UNIQUE 约束将生成唯一的 NON-CLUSTERED INDEX。
我回答说表只有一个主键,但可以有许多唯一约束。 但还有什么?
主列永远不能为空,唯一列可以。
我能想到的一些差异:
- Primary Key 不能为 null,而 unique 将允许一个 null 值。
- 一个 table 上可以有多个唯一键,但只能有一个主键。
部分摘自维基百科 - Unique key - Differences from primary key constraints:
主键约束
- A Primary Key cannot allow null(不能在允许空值的列上定义主键)。
- 每个table不能有一个以上的主键。
- 在某些 RDBMS 上,主键默认生成聚簇索引。
唯一约束
- 可以在允许空值的列上定义唯一约束。
- 每个 table 可以有多个唯一键。
- 在某些 RDBMS 上,唯一键默认生成非聚集索引。
很难说面试官可能一直在寻找什么。有很多选择。
在标准 SQL 中,声明的约束 primary key
和声明的约束 not null unique
在逻辑级别 上的行为相同 。例如,这两者都可以成为外键引用的目标。面试官可能想知道 null
如何融入其中。裸 unique
约束允许空值;主键约束隐式声明 T-SQL.
not null
或者面试官可能一直在看你是否区分了独特的 constraint 和独特的 index。 AFAIK,每个 dbms 通过使用唯一索引来实现唯一约束。但是约束在逻辑层面上表达了数据库的一些东西,而唯一索引在物理层面上表达了数据库的一些东西。
SQL 特别是服务器
面试官可能想知道您是否知道某些计算列(但不是全部)可以被索引。 (那是一个远射。)
也许面试官想看看你能不能谈谈聚类。在 SQL 服务器中,主键约束默认为 clustered
,但索引默认为 nonclustered
。
也许面试官想看看你是否会说任何关于权限的事情。添加约束通常需要比添加索引更广泛的权限。
UNIQUE 约束 和主键 之间的区别是每个table 你可能只有一个主键但您可以定义多个 UNIQUE 约束。主键约束是不可为空。 UNIQUE 约束可以是 nullable。 当您创建一个 UNIQUE 约束时,数据库会自动创建一个 UNIQUE 索引。对于 MS SQL 服务器数据库,PRIMARY KEY 将生成唯一的 CLUSTERED INDEX。 UNIQUE 约束将生成唯一的 NON-CLUSTERED INDEX。