如何在我的列上创建唯一约束(SQL Server 2008 R2)?

158

我有一个SQL Server 2008 R2,并且想设置一个唯一列。

似乎有两种方法可以实现这个目标:“唯一索引”和“唯一约束条件”。就我所理解的来说,它们之间没有太大的区别,虽然大多数情况下推荐使用唯一约束条件,因为这样可以自动创建一个索引。

如何创建一个唯一约束条件?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

如何在 SQL Server Management Studio 中创建唯一约束?

5个回答

195

如何在SQL Server的图形用户界面中将列设为唯一:

使用图形用户界面确实需要一些操作:

在开始之前,请确保您的列不违反唯一约束条件。

  1. 打开SQL Server Management Studio。
  2. 右键单击您的表,选择“设计”选项。
  3. 右键单击要编辑的列,弹出菜单后选择“索引/键”选项。
  4. 点击“添加”按钮。
  5. 展开“常规”选项卡。
  6. 确保在“列”框中选择了要设置为唯一的列。
  7. 将“类型”框更改为“唯一键”。
  8. 点击“关闭”按钮。
  9. 在文件窗口中看到一个小星号,这表示更改尚未保存。
  10. 按保存键或按Ctrl+s。保存后,您的列应该是唯一的。

或者通过SQL查询窗口设置列为唯一:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

更改立即生效:

Command(s) completed successfully.

好的。您还可以在TSQL脚本中添加多个列,例如:alter table your_table add constraint pinky unique(yourcolumn, yourcolumn_2); - Jordan Ryder
什么是“pinky”?算了,显然这是你给这个约束命名的名称。 - Kevin Wheeler
3
你让我感觉自己老了,孩子。Pinky是一个变量名,请参见:https://www.youtube.com/watch?v=qzZmU0aGmcc 抓住今天,总有一天你也会老的。 - Eric Leschinski

69

要通过GUI创建这些约束,您需要使用“索引和键”对话框,而不是“检查约束”对话框。

但在您的情况下,您只需要运行您已经有的那段代码。根本不需要将其输入表达式对话框。


我只需要在查询中运行它吗?当我尝试时,它成功运行了,但是有没有地方可以查看它(即设置更改在哪里)? - White Island
@WhiteIsland - 如果您展开表并查看“Keys”下面,您应该在SSMS对象资源管理器中看到它。 - Martin Smith

22

以下是通过图形用户界面的另一种方式,尽管它经过索引而不是约束来执行与脚本完全相同的操作。

  1. 右键单击“索引”,然后单击“新建索引...”(注意:如果表在设计视图中打开,则此选项将被禁用)

输入图像描述

  1. 为新索引命名(“U_Name”),勾选“唯一”并单击“添加...”

输入图像描述

  1. 在下一个窗口中选择“名称”列

输入图像描述

  1. 在两个窗口中都单击“确定”

2
在SSMS 2014中,创建新索引的右键上下文菜单选项与上面的屏幕截图略有不同。 当单击“新索引”时,您必须从以下列表中选择(聚集索引,非聚集索引,主XML索引,次XML索引,空间索引,非聚集列存储索引和聚集列存储索引)。 通常,您会选择非聚集索引。 - iCode

9

有一件事情并没有被清楚地说明,那就是微软SQL会在后台为添加的约束条件创建一个唯一索引

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

正如您所看到的,有一个新的约束和一个新的索引U_Name


3
当您处于表的“设计”视图时,单击所需列并展开顶部工具栏上的“表设计器”选项卡。选择“索引/键”选项。

Table Designer tool tab

然后添加一个新的约束条件,选择正确的列并将其类型设置为 唯一键,并以某种方式命名。就是这样了!^^ Creating unique constraint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接