独特键和索引与IsUnique = Yes有什么区别?

时间:2009-02-19 11:39:59

标签: sql-server database

我有一个带有主键的表,但是我想要限制其他两列,因此保证两者的组合始终是唯一的。

(一个愚蠢的例子:在BOOKS表中,IBAN列是主键,但Title和Author列的组合也应始终是唯一的。)

在SQL Server Management Studio中,可以创建新索引并将IsUnique设置为是,或者我可以创建新的唯一键。

两种方法之间有什么区别,哪种方法最适合用于哪些目的?

6 个答案:

答案 0 :(得分:35)

创建UNIQUE约束是对规则的更清晰的陈述。索引的IsUnique属性是一个实现细节 - 规则的实施方式,而不是 规则。但效果是一样的。

答案 1 :(得分:7)

2之间存在明显差异。 唯一约束定义了哪些列组合必须是唯一的。 唯一索引只是确保上述内容始终有效的一种方法。 但是,可以使用支持唯一约束的非唯一索引。 (如果约束是deferable =只需要在提交时有效,但允许在事务中间被破坏)

答案 2 :(得分:6)

您知道,当您创建唯一约束时,SQL Server将在幕后创建索引

答案 3 :(得分:4)

我刚刚发现的一件事是,在SSMS中,默认情况下将唯一键的脚本设置为true,但索引的脚本设置为False。当我使用SSMS的脚本表作为上下文菜单时,我没有得到我唯一的索引。

此外,如果类型设置为唯一键,则无法更改“忽略重复键”设置。首先,您将类型从Unique Key更改为Index,然后您可以将Ignore Duplicate Keys设置为true。

答案 4 :(得分:0)

唯一索引是唯一键。

答案 5 :(得分:0)

我认为它们之间没有任何区别,但是使用唯一索引,我们可以有两个好处,因为该列已经是唯一的,并且在其上也具有索引,所以我可以更快地进行搜索。因此,使用唯一索引会带来更多好处。