unique约束使用unique index来限制列值的唯一性;
创建unique约束之后,column中允许插入null值,unique 约束将两个null值看作是相同的(即null=null为true),null和其他任何非null值都不相等。
一,unique约束分为column level和table level,区别在于Table Level需要制定unique约束影响的column(or columns)。
Column level的unique 约束语法
column_name <data_type> [ CONSTRAINT constraint_name ] { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] (column [ ASC | DESC ] [ ,...n ] ) [ WITH FILLFACTOR = fillfactor [ WITH ( <index_option>[ , ...n ] ) ] }
Table level的unique 约束语法
[ CONSTRAINT constraint_name ] { { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] (column [ ASC | DESC ] [ ,...n ] ) [ WITH FILLFACTOR = fillfactor [ WITH ( <index_option>[ , ...n ] ) ] }
使用create table命令来创建unique 约束
create table dbo.dt_test_unique ( id int constraint UQ_id unique nonclustered, code int ) create table dbo.dt_test_unique ( id int , code int, constraint UQ_id unique nonclustered(id) )
二,在已经存在的表上
create table dbo.dt_test_unique ( id int , code int )
1,在已经存在的表上增加unique约束
alter table dbo.dt_test_unique add constraint uq_test_id unique nonclustered(id)
2,在已经存在的表上删除unique约束
alter table dbo.dt_test_unique drop constraint uq_test_id
3,在已经存在的表上修改unique约束
在已经存在的表上修改unique约束,采用的workaround是先删除 unique约束,后增加unique约束
alter table dbo.dt_test_unique drop constraint uq_test_id alter table dbo.dt_test_unique add constraint uq_test_id unique nonclustered(id)
4,通过alter table 命令增加new column来增加 column level的unique 约束
alter table dbo.dt_test_unique add datekey int constraint uq_test_datekey unique nonclustered
推荐文档:
http://www.cnblogs.com/kissdodog/archive/2013/05/31/3109509.html
http://www.cnblogs.com/mybear/archive/2010/09/03/1816810.html
参考文档:
https://msdn.microsoft.com/en-us/library/ms190273(v=sql.110).aspx
https://msdn.microsoft.com/en-us/library/ms188066(v=sql.110).aspx
https://msdn.microsoft.com/en-us/library/ms187742(v=sql.110).aspx
https://msdn.microsoft.com/zh-cn/library/ms174979.aspx