代码之家  ›  专栏  ›  技术社区  ›  JacobE

is unique=yes的unique键和index有什么区别?

  •  50
  • JacobE  · 技术社区  · 16 年前

    我有一个带有主键的表,但是我希望约束另外两列,这样就可以保证这两列的组合始终是唯一的。

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

    在SQL Server Management Studio中,可以创建新索引并将i s unique设置为yes,也可以创建新的唯一键。

    这两种方法有什么区别,哪种方法最适合于哪种目的?

    6 回复  |  直到 6 年前
        1
  •  35
  •   Tony Andrews    16 年前

    创建一个唯一的约束是规则的一个更清晰的陈述。索引的isunique属性是一个实现细节- 怎样 规则已实现,而不是 什么 规则是。但效果是一样的。

        2
  •  7
  •   Jonas Andersson    16 年前

    两者之间有明显的区别。 唯一约束定义哪些列组合必须是唯一的。 唯一索引只是确保上述内容始终有效的一种方法。 但是有可能有一个支持唯一约束的非唯一索引。 (如果约束可延迟=仅在提交时有效,但允许在事务中间中断)

        3
  •  6
  •   SQLMenace    16 年前

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

        4
  •  4
  •   Tod    13 年前

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

    另外,如果类型设置为唯一键,则不能更改“忽略重复键”设置。首先,将类型从unique key更改为index,然后可以将ignore duplicate key设置为true。

        5
  •  0
  •   tehvan    16 年前

    唯一索引是唯一键。

        6
  •  0
  •   Bibash Adhikari    6 年前

    我不认为它们之间有什么区别,但是使用唯一索引,我们可以有两个好处,因为这个列已经是唯一的,而且上面也有索引,所以我会更快地搜索。所以使用唯一索引更有好处。