【问题标题】:How can I create a unique constraint on my column (SQL Server 2008 R2)?如何在我的列上创建唯一约束 (SQL Server 2008 R2)?
【发布时间】:2011-07-08 02:26:21
【问题描述】:

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

似乎有两种方法可以做到这一点:“唯一索引”和“唯一约束”。尽管大多数人推荐使用唯一约束,但它们与我的理解并没有太大区别,因为您也会自动获得索引。

如何创建唯一约束?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

有没有办法通过 SQL Server Management Studio 创建唯一约束?

【问题讨论】:

    标签: sql sql-server sql-server-2008 unique-constraint


    【解决方案1】:

    当您处于表格的设计 视图中时,单击所需的列并展开顶部工具栏上的表格设计器 选项卡。选择 Indexes/Keys 选项。~

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

    【讨论】:

      【解决方案2】:

      有一点没有明确提到,微软 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】:

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

        1. 右键单击“索引”并单击“新建索引...”(注意:这是 如果您在设计视图中打开表格,则禁用)

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

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

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

        【讨论】:

        • 在 SSMS 2014 中,用于创建新索引的右键单击上下文菜单选项与上述屏幕截图略有不同。单击新建索引时,您必须从(聚集索引、非聚集索引、主 XML 索引、二级 XML 索引、空间索引、非聚集列存储索引和聚集列存储索引)列表中进行选择。通常,您会选择非聚集索引。
        【解决方案4】:

        通过 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 add constraint pinky unique(yourcolumn, yourcolumn_2);
        • 什么是“小指”?没关系,这显然是您赋予此约束的名称。
        • 你让我觉得自己变老了,孩子。 Pinky 是一个变量名,请参阅:youtube.com/watch?v=qzZmU0aGmcc 抓紧时间,有一天你也会变老。
        【解决方案5】:

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

        但在您的情况下,您只需要运行您已有的代码。完全不需要进入表情对话。

        【讨论】:

        • 所以我可以在查询中运行它吗?当我尝试时,它运行成功,但是我可以去任何地方查看(即在哪里更改了设置)?
        • @WhiteIsland - 如果您展开表格并在“Keys”下查看,您应该会在 SSMS 对象资源管理器中看到它
        猜你喜欢
        • 2013-01-01
        • 2012-07-30
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多