UniqueKey和Index与IsUnique = Yes有什么区别?

我有一个主键的表,但我想两个其他列被约束,所以两个组合保证总是唯一的。

(一个愚蠢的例子:在一个BOOKS表中,IBAN列是主键,但是标题和作者列的组合也应该是唯一的。)

在SQL Server Management Studio中,可以创build一个新的索引并将IsUnique设置为是,也可以创build一个新的唯一密钥。

这两种方法有什么区别,哪一种最适合哪种用途?

创build一个UNIQUE约束是规则的一个更清晰的陈述。 索引的IsUnique属性是实现细节 – 规则如何实现,而不是规则是什么 。 效果是一样的。

2之间有一个明显的区别。唯一的约束定义了什么样的组合必须是唯一的。 唯一的索引只是确保上述内容总是有效的一种方法。 但是可能有一个非唯一索引支持一个唯一的约束。 (如果约束是可排除的=仅在提交时有效,但在交易中间允许被破坏)

只是为了让你知道,当你创build一个唯一的约束时,SQL Server将在幕后创build一个索引

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

另外,如果types设置为唯一键,则不能更改“忽略重复键”设置。 首先,您将types从“唯一键”更改为“索引”,然后您可以将“忽略重复键”设置为true。

唯一索引是唯一键。