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


108

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

似乎有两种方法可以做到这一点:“唯一索引”和“唯一约束”。尽管大多数人建议使用唯一性约束,但它们与我了解的差别不大,因为您也会自动获得索引。

如何创建唯一约束?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

是否可以通过SQL Server Management Studio创建唯一约束?

Answers:


59

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

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


所以我可以在查询中运行它?当我尝试运行时,它运行成功,但是哪里可以看到它(即更改了设置)?
白色岛的

@WhiteIsland -你应该看到它在SSMS对象资源管理器,如果你下展开“键”表和外观
马丁·史密斯

126

从GUI在SQL Server中将列设置为唯一:

它们确实使您在谷仓中四处奔跑,以使用GUI进行操作:

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

  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添加约束pinky unique(yourcolumn,yourcolumn_2);
约旦

15

这是通过GUI的另一种方法,即使它通过对象资源管理器中的索引(而不是约束),它也可以完全执行脚本的操作。

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

在此处输入图片说明

  1. 给新索引命名(“ U_Name”),选中“ Unique”,然后单击“ Add ...”

在此处输入图片说明

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

在此处输入图片说明

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

1
在SSMS 2014中,用于创建新索引的右键单击上下文菜单选项与上述屏幕截图稍有不同。单击“新建索引”时,必须从以下列表中进行选择:(聚集索引,非聚集索引,主XML索引,辅助XML索引,空间索引,非聚集列存储索引和群集列存储索引)。通常,您会选择“非聚集索引”。
iCode

8

一件未明确介绍的事情是,Microsoft 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.