CHECK約束添加規則 1、CHECK 約束用於限制列中的值的範圍。 2、Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的範圍,在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。 3、如果對單個列定義 CHECK 約束,那麼該列只允許特定的 ...
CHECK約束添加規則
1、CHECK 約束用於限制列中的值的範圍。
2、Check約束通過邏輯表達式來判斷數據的有效性,用來限制輸入一列或多列的值的範圍,在列中更新數據時,所要輸入的內容必須滿足Check約束的條件,否則將無法正確輸入。
3、如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。
4、如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。
使用SSMS資料庫管理工具添加CHECK約束
1、連接資料庫,選擇資料庫,選擇數據表-》右鍵點擊(或者直接點擊約束,右鍵點擊,選擇添加約束,後面步驟相同)-》選擇設計。
2、選擇要添加約束的數據列-》右鍵點擊-》選擇CHECK約束。
3、在CHECK約束彈出框中點擊添加。
4、在CHECK約束彈出框中-》輸入CHECK約束表達式-》輸入CHECK約束名-》輸入CHECK約束描述-》其他可以選擇預設。
5、點擊關閉-》點擊保存按鈕(或者ctrl+s)-》刷新表查看結果。
使用T-SQL腳本添加CHECK約束
當表結構存在時
添加CHECK約束時首先校驗約束是否已存在,如果存在應該是先刪除再添加,如果不存在則直接添加。
語法:
-- 添加一個預設約束
use 資料庫名;
go
if exists(select * from sysobjects where name=約束名)
alter table 表名 drop constraint 約束名;
go
alter table 表名 add constraint 約束名 check(約束規則),constraint 約束名 check(約束規則);
go
示例:
-- 添加一個預設約束
use testss;
go
if exists(select * from sysobjects where name='check1')
alter table test1 drop constraint check1;
go
alter table test1 add constraint check1 check(height>=170 and height<=175);
go
當表結構不存在時
如果表結構不存在,可以直接添加約束,可以同時添加一個或者多個約束。
語法:
--如果表結構不存在時添加check約束
use 資料庫名;
go
--如果已存在表則刪除
if exists(select * from sysobjects where name=表名 and xtype='U')
drop table 表名;
go
--創建表
create table 表名
(
--欄位聲明
列名 int identity(1,1) not null,
列名 nvarchar(50) null,
列名 nvarchar(50) null constraint 約束名 check(約束規則),
列名 nvarchar(50) null,
列名 int,
列名 int constraint 約束名 check(約束規則)
primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary], --主鍵索引聲明
)on [primary]
--欄位註釋聲明
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';
go
示例:
--如果表結構不存在時添加check約束
use testss;
go
--如果已存在表則刪除
if exists(select * from sysobjects where name='test1' and xtype='U')
drop table test1;
go
--創建表
create table test1
(
--欄位聲明
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null constraint check1 check(sex='男' or sex='女'),
age nvarchar(50) null,
classid int,
height int constraint check2 check(height>=110 and height<=120)
primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主鍵索引聲明
)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'sex';
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';
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'classid';
go
CHECK約束優缺點
優點:
1、保證列數據規範和範圍,可以約束數據完整性
2、有Check約束的列可以提供給查詢優化器信息從而提升性能
缺點:
1、插入或者修改時數據不符合約束規則,無法修改成功。