唯一索引和唯一键有什么区别?
独特的部分并不是差异所在。索引和主键不是同一件事,也无法进行比较。
主键(Primary Key)是一列或多列数据,通过强制约束使其唯一,可以是主键或明确定义为唯一约束。而索引则是一种用于存储数据位置以便更快检索的结构。
参考文档:
在表或视图上创建唯一索引。唯一索引是指不允许任何两行具有相同的索引键值的索引。视图上的聚集索引必须是唯一的。
您可以使用唯一约束来确保在不参与主键的特定列中不输入重复值。尽管唯一约束和主键约束都可实现唯一性,但当您要强制执行非主键的一列或多列(组合)的唯一性时,请使用唯一约束,而不是主键约束。
这篇MSDN文章比较了这两种方法。术语上“约束”是ANSI标准,但在SQL Server中你无法禁用唯一约束...
对于大多数情况来说,它们没有区别 - 约束实际上是在底层实现为一个索引。MSDN文章支持这一点 - 差异在于元数据,例如:
目的:
筛选选项:
存储选项:
图标:
唯一键:它是一种对数据库施加限制的约束条件。这种限制是不允许重复值存在。例如,如果您想将某一列选为主键,则该列应为NOT NULL和UNIQUE。
唯一索引:它是一种在执行数据库查询时提高性能的索引。在唯一索引中,也不允许索引中存在重复值,即没有两行具有相同的索引键值。
关键字和索引都是表行的标识符。
尽管索引是平行的标识结构,包含指向已识别行的指针,而关键字是就地字段成员。
作为标识符的关键字意味着唯一性(约束)和NOT NULL(约束)。
将NULL用作标识符没有意义(因为null无法识别任何内容),也不具有非唯一标识值。
非聚集索引可以包含实际数据,不用作实际数据的标识符,因此可以是非唯一的[1]。
不幸的是,将关键字或索引(标识符)称为约束(规则或限制)是一种不好的做法,这也是大多数先前答案所遵循的。
关键字在以下情况下使用:
外键是另一个表中的键(其中它是主键),甚至不是他们经常引用的键。这种用法被解释为将“外键约束”术语简化为“外键”。
主键约束实际上意味着非空和唯一约束,以及所引用的列(或组合列)是标识符,但不幸的是被“主键”或“主键约束”替代,而它既不能仅称为(主键)约束,也不能仅称为(主)键。
更新:
我的相关问题:
[1]
为什么需要为INDEX创建唯一参数?