SQLServer之CHECK约束

发布时间:2018-11-15  栏目:SQL  评论:0 Comments

CHECK约束添加规则

1、CHECK
约束用于限制列着之值的限。

2、Check约束通过逻辑表达式来判定数的管用,用来限制输入一排或多排的值的范围,在排列被更新数据经常,所要输入的情节要满足Check约束的格,否则用无法对输入。

3、如果对单个列定义 CHECK
约束,那么该列只同意特定的价值。

4、如果对一个表定义 CHECK
约束,那么是约束会于一定的列中对值进行限定。

自律定义

对此数据库来说,基本表的完整性约束分为列级约束规范同表级约束规范:

列级约束原则

     
 列级约束原则是本着某一个特定列的约,包含在列定义中,可以一直和在该列的其余概念之后,用空格分隔,不用指定列名。

表级约束规范

     
 表级约束规范同列定义相互独立,不包以列定义中,通常用于对片单或少单以上之排一起开展约。

利用SSMS数据库管理工具添加CHECK约束

1、连接数据库,选择数据库,选择数据表-》右键点击(或者直接点击约束,右键点击,选择丰富约束,后面步骤同)-》选择设计。

图片 1

2、选择要长约束之多少列-》右键点击-》选择CHECK约束。

图片 2

3、在CHECK约束弹出框中点击添加。

图片 3

4、在CHECK约束弹出框中-》输入CHECK约束表达式-》输入CHECK约束名-》输入CHECK约束描述-》其他可以选默认。

图片 4

5、点击关闭-》点击保存按钮(或者ctrl+s)-》刷新表查看结果。

图片 5

格介绍

在数据库管理体系面临,保证数据库中之数据完整性是老关键之。所谓数据完整性,就是赖储存于数据库中数的一致性与不利。约束定义关于列中允许值的规则,是挟持完整性的规范编制。使用约束优先为以触发器、规则及默认值。查询优化器也以约束定义生成高性能的询问执行计划。

数据完整性分类

于SQL
Server中,根据数量整体新章程所打算的数据库对象及限不同,可以以数据完整性分为以下几种:

实业完整性

实体完整性简单的说,就是用表中的各个一行看作一个实体。实体完整性要求说明底标记符列或主键的完整性。可以经树立唯一索引、PRIMARY
KEY约束、UNIQUE约束,以及列的IDENTITY属性来实施实体完整性。

处完整性

地域完整性是凭于定列的输入有效性。要求表中指定列的数量具有无可争辩的数据类型、格式和管事的数目范围。强制域有效性的不二法门有:限制类(通过数量类)、格式(通过
CHECK 约束与规则)或可能价值的限定。域完整性通过 FOREIGN KEY 约束、CHECK
约束、DEFAULT 定义、NOT NULL 定义及规则来落实。

引用完整性

援完整性又如参照完整性。引用完整性维持为参照表和参照表之间的数据一致性,它经过主键(PRIMARY
KEY)约束和外键(FOREIGN
KEY)约束来贯彻。引用完整性确保键值在拥有表中一致。这样的一致性要求不能引用不设有的值,如果键值更改了,那么在全方位数据库被,对拖欠键值的所有援要拓展相同的改。在给参照表中,当那主键值为其他表所参照时,该行未克给删除也非容许改变。在参考表中,不同意参照不在的主键值。

以T-SQL脚论上加CHECK约束

封锁分类

SQLServer中产生五栽约束类型,分别是 PRIMARY
KEY约束、FOREIGN
KEY约束、UNIQUE约束、DEFAULT约束、和CHECK约束。查看或创造约束都设采用到
Microsoft SQL Server Managment Studio。

当表结构是时时

添加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

 图片 6

图片 7

PRIMARY KEY约束

于表中时常来相同排列或多排的做,其值能唯一标识表中之各级一样行,这样的一样排列或多排成表底主键(PrimaryKey)。

一个说明只能发出一个主键,而且主键约束着之排不克为空值。

惟有主键列才会让当其他表的外键所创建。

当表结构不有时时

只要表结构不设有,可以直接长约束,可以同时添加一个还是多独约束。

语法:

–如果表结构不设有时添加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

 图片 8

图片 9

图片 10

FOREIGN KEY约束 

外键约束是因此来加强两单说明(主表和从表)的同一排列或多排数据里的连年的。

始建外键约束的依次是预先定义主表的主键,再对自表定义外键约束。

除非主表的主键才能够为于表用来当外键使用,被封锁之于表中的排列好不是主键,主表限制了从表更新与插的操作。

CHECK约束优缺点

优点:

1、保证列数据标准及限制,可以约数据完整性

2、有Check约束的排列好提供于查询优化器信息之所以升级性

缺点:

1、插入或者涂改时数未合乎约束规则,无法修改成功。

UNIQUE约束

唯约束保证表中的平排列数据没有一样之价。

以及主键约束类似,唯一约束为强制唯一性,但唯一约束用于非主键的同列或者多排的结合,且一个发明得定义多只唯一约束。

DEFAULT约束

使在表明中定义了默认值约束,用户以插入新的多寡时,如果该行没有点名数量,那么网将默认值赋给该列,如果我们不装默认值,系统默认为NULL。

CHECK约束

CHECK 约束用于限制列被之值的界定。

Check约束通过逻辑表达式来判断数的管事,用来限制输入一排或多排的值的克,在排列被更新数据经常,所而输入的始末要满足Check约束的条件,否则用无法对输入。

若对单个列定义 CHECK
约束,那么该列只同意特定的价值。

设对一个表定义 CHECK
约束,那么是约束会以一定的列中对值进行界定。

律优缺点

优点:

1、保持数据库完整性。

2、保证列被多少的唯一性。

3、插入、更新、删除时从严的界定校验机制。

4、快速。

5、可以引用其他列。

6、在指令执行前发。

7、遵循ANSI标准。

缺点:

1、插入、更新、删除时用校验规则比较辛苦。

2、必须对每个表还定义。

3、不能引用其他表。

4、不可知绑定到数据类型。

 

留下评论

网站地图xml地图