【发布时间】:2016-09-20 03:55:18
【问题描述】:
我回答说表只有一个主键,但可以有许多唯一约束。 但是还有什么?
【问题讨论】:
-
PK 列永远不能为空,唯一的列可以是。
标签: sql primary-key unique-constraint
我回答说表只有一个主键,但可以有许多唯一约束。 但是还有什么?
【问题讨论】:
标签: sql primary-key unique-constraint
主列永远不能为空,唯一列可以是。
【讨论】:
我能想到的一些区别:
部分摘自维基百科 - Unique key - Differences from primary key constraints:
主键约束
唯一约束
【讨论】:
UNIQUE 约束 和主键 之间的区别在于,每个表可能只有一个主键,但可以定义多个 UNIQUE 约束。主键约束不可为空。 UNIQUE 约束可能可为空。 当您创建一个 UNIQUE 约束时,数据库会自动创建一个 UNIQUE 索引。对于 MS SQL Server 数据库,PRIMARY KEY 将生成唯一的 CLUSTERED INDEX。 UNIQUE 约束将生成唯一的 NON-CLUSTERED INDEX。
【讨论】:
很难说面试官可能一直在寻找什么。有很多选择。
在标准 SQL 中,声明为 primary key 的约束和声明为 not null unique 的约束在逻辑级别上表现相同。例如,这两者都可以是外键引用的目标。面试官可能想知道null 是如何融入其中的。裸 unique 约束允许空值;主键约束在 T-SQL 中隐式声明每一列 not null。
或者面试官可能一直在查看您是否将唯一的约束与唯一的索引区分开来。 AFAIK,每个 dbms 通过使用唯一索引来实现唯一约束。但是约束在逻辑层面表达了关于数据库的一些信息,而唯一索引在物理层面表达了关于数据库的一些信息。
特别是 SQL Server
面试官可能想看看您是否知道某些计算列(但不是全部)可以被索引。 (那是一个远射。)
也许面试官想看看你是否会谈论集群。在 SQL Server 中,主键约束默认为 clustered,但索引默认为 nonclustered。
也许面试官想看看你是否会谈论权限。您通常需要比添加索引更广泛的权限来添加约束。
【讨论】: