我有 SQL Server 2008 R2,我想设置一个唯一列。
似乎有两种方法可以做到这一点:“唯一索引”和“唯一约束”。 它们与我的理解没有太大区别,尽管大多数人建议使用唯一约束,因为您也会自动获得索引。
如何创建唯一约束?
ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)
有没有办法通过 SQL Server Management Studio 创建唯一约束?
他们真的让你在谷仓里跑来跑去,用 GUI 来做这件事:
开始之前,请确保您的列不违反唯一约束。
alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);
更改立即生效:
Command(s) completed successfully.
要通过 GUI 创建这些约束,您需要“索引和键”对话框,而不是检查约束。
但就您而言,您只需要运行已有的代码即可。根本不需要进入表情对话
没有明确涵盖的一件事是 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
ALTER TABLE [<Table_Name_Here>] DROP CONSTRAINT [<Constraint_Name_Here>];
<Constraint_Name_Here>
中删除名为 <Table_Name_Here>
的约束。ALTER TABLE [<Table_Name_Here>] ADD CONSTRAINT [<Constraint_Name_Here>] UNIQUE ([<Column_Name_Here>]);
<Constraint_Name_Here>
添加一个名为 <Table_Name_Here>
的新约束。<Column_Name_Here>
上的 UNIQUE 约束。<Column_Name_Here>
列中的值在表中的所有行中必须是唯一的。总结: