SQLServer之UNIQUE約束

來源:互聯網
上載者:User

標籤:主鍵   col   相同   varchar   點擊   serve   姓名   sel   lan   

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_nameunique(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約束

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.