SQLServer之UNIQUE約束
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);
go
示例:
if exists(select * from sysobjects where name=‘unique_t_name‘)
alter table [testss].[dbo].[test1] drop constraint unique_t_name;
go
alter table [testss].[dbo].[test1] add constraint unique_t_name unique(name,sex);
go
當表結構不存在時
當表結構不存在時,需要在建表語句中添加,添加一列唯一索引和多列唯一索引語法相同。
語法:
--當表結構不存在時添加唯一約束
if exists( select * from sysobjects where name=數據庫名.[dbo].表名 and type =‘U‘)
drop table 數據庫名.[dbo].表名;
go
--當表結構不存在時
--建表語法聲明
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‘;
go
示例:
--當表結構不存在時添加唯一約束
if exists( select * from sysobjects where name=‘test1‘and type =‘U‘)
drop table test1;
go
--當表結構不存在時
--建表語法聲明
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)
)on [primary]
--字段註釋聲明
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‘;
go
UNIQUE索引優缺點
優點:
1、唯一性約束所在的列允許空值。
2、可以把唯一性約束放在一個或者多個列上,這些列或列的組合必須有唯一的。
3、唯一性約束強制在指定的列上創建一個唯一性索引。在默認情況下,創建唯一性的非聚簇索引,但是,也可以指定所創建的索引是聚簇索引。
缺點:
1、創建唯一約束時會創建索引,占用磁盤空間。
2、插入或者修改約束列的值時,會存在校驗規則,會比較費事。
SQLServer之UNIQUE約束