UNIQUE限制添加規則
1、唯一限制確定表中的一列資料沒有相同的值。
2、與主鍵限制類似,唯一限制也強制唯一性,但唯一限制用于非主鍵的一列或者多列的組合,且一個表可以定義多個唯一限制。
使用SSMS資料庫管理工具添加UNIQUE限制
1、連接配接資料庫,選擇資料庫,選擇資料表-》右鍵點選-》選擇設計。

2、在表設計視窗中-》選擇要添加限制的資料列-》右鍵點選-》選擇索引/鍵。
3、在索引/鍵視窗中-》點選添加。
4、選擇新增的索引/鍵-》在正常視窗中-》類型選擇唯一鍵。
5、在正常視窗中-》點選列。
6、在索引列視窗中-》先選擇限制列-》然後選擇限制列排序規則-》點選确定。
7、在索引/鍵彈出框中正常視窗中-》在名稱中輸入限制名稱-》在說明中輸入限制描述-》其他可以選擇預設-》點選關閉。
8、點選儲存按鈕(或者ctrl+s)-》重新整理表,檢視結果。
使用T-SQL腳本添加UNIQUE限制
當表結構已存在時
給一列或者多列添加唯一限制時,先判斷要添加的限制是否存在,如果存在則先删除再添加,如果不存在則直接添加。
文法:
if exists(select * from sysobjects where name=限制名)
alter table 資料庫名.[dbo].表名 drop constraint 限制名;
go
alter table 資料庫名.[dbo].表名 add constraint 限制名 unique(列名1,列名2);
示例:
if exists(select * from sysobjects where name='unique_t_name')
alter table [testss].[dbo].[test1] drop constraint unique_t_name;
alter table [testss].[dbo].[test1] add constraint unique_t_name unique(name,sex);
當表結構不存在時
當表結構不存在時,需要在建表語句中添加,添加一列唯一索引和多列唯一索引文法相同。
--當表結構不存在時添加唯一限制
if exists( select * from sysobjects where name=資料庫名.[dbo].表名 and type ='U')
drop table 資料庫名.[dbo].表名;
--當表結構不存在時
--建表文法聲明
create table 資料庫名.[dbo].表名
(
--字段聲明
列名1 int identity(1,1) not null,
列名2 nvarchar(50) null,
列名3 int not null,
primary key clustered(列名1 asc) with(ignore_dup_key=off) on [primary], --主鍵索引聲明
constraint unique_name_sex unique(列名2,列名3)
)on [primary]
--字段注釋聲明
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述1' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名1';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述2' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名2';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述3' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名3';
if exists( select * from sysobjects where name='test1'and type ='U')
drop table test1;
create table test1
id int identity(1,1) not null,
name nvarchar(50) null,
age int not null,
primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主鍵索引聲明
constraint unique_name_sex unique(name,age)
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主鍵' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年齡' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';
UNIQUE索引優缺點
優點:
1、唯一性限制所在的列允許空值。
2、可以把唯一性限制放在一個或者多個列上,這些列或列的組合必須有唯一的。
3、唯一性限制強制在指定的列上建立一個唯一性索引。在預設情況下,建立唯一性的非聚簇索引,但是,也可以指定所建立的索引是聚簇索引。
缺點:
1、建立唯一限制時會建立索引,占用磁盤空間。
2、插入或者修改限制列的值時,會存在校驗規則,會比較費事。