SQLServer之CHECK约束

图片 27
数据库

CHECK约束增多规则

壹、CHECK
约束用于限制列中的值的限定。

二、Check约束通过逻辑表明式来剖断数据的管用,用来界定输入1列或多列的值的范围,在列中立异数据时,所要输入的内容必须满足Check约束的尺度,不然将无法准确输入。

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

④、假设对贰个表定义 CHECK
约束,那么此约束会在特定的列中对值进行限定。

DEFAULT约束增加规则

壹、若在表中定义了暗中同意值约束,用户在插入新的数目行时,倘诺该行未有点名数量,那么系统将暗许值赋给该列,要是大家不设置私下认可值,系统默感到NULL。

2、倘若“默许值”字段中的项替换绑定的暗中同意值(以不带圆括号的花样显得),则将唤起您拨冗对暗中同意值的绑定,并将其替换为新的私下认可值。

3、若要输入文本字符串,请用单引号 (‘)
将值括起来;不要选择双引号
(“),因为双引号已封存用于带引号的标志符。

四、若要输入数值暗中认可值,请输入数值并且永不用引号将值括起来。

五、若要输入对象/函数,请输入对象/函数的称谓并且不要用引号将名称括起来。

FOREIGN KEY约束增加规则

1、外键约束并不只好够与另一表的主键约束相链接,它还足以定义为引用另三个表中
UNIQUE 约束的列。

2、假如在 FOREIGN
KEY 约束的列中输入非 NULL
值,则此值必须在被引用列中设有;不然,将赶回违反外键约束的错误音讯。 若要力保验证了咬合外键约束的持有值,请对富有参预列钦命NOT NULL。

三、FOREIGN KEY
约束仅能引用位于同壹服务器上的一样数据库中的表。 跨数据库的引用完整性必须经过触发器落成。

四、FOREIGN KEY
约束可援引同一表中的其余列。 此行为称作自引用。

5、在列级钦命的
FOREIGN KEY 约束只可以列出三个引用列。 此列的数据类型必须与定义约束的列的数据类型一样。

陆、在表级钦点的
FOREIGN KEY 约束所具有的引用列数目必须与约束列列表中的列数同样。 种种引用列的数据类型也非得与列表中相应列的数据类型一样。

7、对于表可包涵的引用其余表的 FOREIGN KEY
约束的数额或其余表所具有的引用特定表的 FOREIGN KEY 约束的多少, 数据库引擎 都不曾预订义的限定。 固然如此,可利用的 FOREIGN KEY
约束的实际上数目依然受硬件配置以及数据库和应用程序设计的界定。 表最多能够将 贰伍2个别的表和列作为外键引用(传出引用)。 SQL
Server 201陆 (一3.x) 将可在独立的表中引用的别的表和列(传入引用)的多少限制从
25三 进步至 十,000。 (包容性等第至少必须为
130。)数量限制的滋长带来了下列约束:

DELETE 和 UPDATE
DML 操作帮衬胜出 25叁 个外键引用。 不帮助ME奥德赛GE 操作。

对本身进行外键引用的表仍只好进展 二5二个外键引用。

列存款和储蓄索引、内部存储器优化表和 Stretch Database
暂不协理开始展览抢先 二伍三 个外键引用。

八、对于目前表不强制 FOREIGN KEY 约束。

玖、假使在 CLSportage用户定义类型的列上定义外键,则该类型的兑现必须帮忙二进制排序。

拾、仅当 FOREIGN
KEY
约束引用的主键也定义为项目 varchar(max) 时,技术在此约束中选拔项目为varchar(max) 的列。

动用SSMS数据库管理工科具增多CHECK约束

壹、连接数据库,选拔数据库,选用数据表-》右键点击(大概间接点击约束,右键点击,选取丰富约束,后边步骤同样)-》选用设计。

图片 1

二、采用要丰硕约束的多寡列-》右键点击-》选择CHECK约束。

图片 2

三、在CHECK约束弹出框中式点心击加多。

图片 3

4、在CHECK约束弹出框中-》输入CHECK约束表明式-》输入CHECK约束名-》输入CHECK约束描述-》别的能够选拔私下认可。

图片 4

伍、点击关闭-》点击保存按键(可能ctrl+s)-》刷新表查看结果。

图片 5

行使SSMS数据库管理工科具增多DEFAULT约束

壹、连接数据库,采纳数据表-》右键点击-》选用设计。

图片 6

贰、在表设计窗口中-》选取数据列-》在列属性窗口中找到暗中认可值或绑定-》输入默许值(注意暗中认可值的数据类型和输入格式)。

图片 7

三、点击保存开关(只怕ctrl+s)-》刷新表-》再一次展开表查看结果。

图片 8

运用SSMS数据库处理工科具增多外键约束

本示例演示当表结构已存在时增添外键约束,创立表时增进外键约束步骤和表结构存在时增添外键步骤同样。示例演示如下:

一、连接数据库,打开要增多外键的数目表-》右键点击-》选取设计。

图片 9

二、在表设计窗口-》采用要增加外键的多寡行-》右键点击-》选用事关。

图片 10

3、在外键关系窗口中-》点击加多。

图片 11

四、增加完成后-》首先修改表和列规范。

图片 12

五、在表和列窗口中-》输入外键名-》在右边选用主表和涉嫌的列-》在右手选择从表和当作外键的列-》点击鲜明。

图片 13

陆、在外键关系窗口中-》可选择充足大概不增加外键描述-》可挑选丰硕或然不增加修改或许去除数据时级联操作-》可采取丰裕大概不添坚实制外键约束-》可挑选充裕或然不增加强制用于复制-》点击关闭。

图片 14

柒、点击保存按钮(ctrl+s)-》此时表会弹出警告窗口,点击是-》刷新查看外键是还是不是丰裕成功。

图片 15

图片 16

运用T-SQL脚本增添CHECK约束

选取T-SQL脚本加多DEFAULT约束

应用T-SQL脚本增加外键约束

当表结构存在时

增多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

 图片 17

图片 18

当表结构已存在时

率先判别表中是或不是存在私下认可约束,借使存在则先删除默许约束再增添,若是不设有则直接助长。

语法:

use 数据库
go
–判别默许约束是不是留存,假如存在则先删除,假如不存在则直接助长
if exists(select * from sysobjects where
name=约束名)
alter table 表名 drop constraint
约束名;
go
–给内定列增添暗许约束
alter table 表名 add constraint 约束名
default(约束值) for 列名;
go

示例:

use [testss]
go
–推断默许约束是或不是留存,即使存在则先删除,借使不存在则直接助长
if exists(select * from sysobjects where
name=’defalut_height’)
alter table [testss].[dbo].[test1]
drop constraint defalut_height;
go
–给钦定列加多暗许约束
alter table [testss].[dbo].[test1]
add constraint defalut_height default(160) for height;
go

图片 19

图片 20

当表结构已存在时

即使要增长约束的表已存在外键约束,需求先删除却键约束再增加外键约束。倘诺不设有外键约束能够增加外键约束。

语法:

if exists(select * from sysobjects where
name=约束名)
alter table 数据库名.[dbo].表名 drop
constraint 约束名;
alter table 数据库名.[dbo].表名 with
check add constraint 约束名 foreign key(列名)
references 数据库名.[dbo].表名(列名)

on delete cascade
on update cascade;
go

示例:

if exists(select * from sysobjects where
name=’t1_t2′)
alter table [testss].[dbo].[test1]
drop constraint t1_t2;
alter table [testss].[dbo].[test1]
with check add constraint t1_t2 foreign key(classid)
references
[testss].[dbo].[test2](id)
on delete cascade
on update cascade;
go

图片 21

当表结构不存在时

若果表结构不存在,能够一直抬高约束,能够同时充裕叁个照旧五个约束。

语法:

–假诺表结构不设有时增多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

 图片 22

图片 23

图片 24

创立表时增进暗中同意约束

先是剖断表是或不是选在,假设存在则先删除表再加多,假如不存在则直接抬高。

语法:

–创制新表时增添暗中同意约束
–数据库评释
use 数据库名
go
–要是表已存在则先删除表更创立,假使表不设有则一向开立
if exists(select * from sysobjects where
name=表名 and type =’U’)
drop table 表名;
go
–建表语法声明
create table 表名
(
–字段证明
列名 列类型 identity(1,1) not
null,
列名 列类型) null,
列名 列类型 null,
列名 列类型 null,
列名 列类型,
列名 列类型 constraint 约束名 default
默认值,
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

示例:

–创制新表时加多私下认可约束
–数据库注解
use testss
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,
sex nvarchar(50) null,
age nvarchar(50) null,
classid int,
height int constraint default_he default
166,
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

图片 25

图片 26

在新表中创设外键

 语法:

if exists( select * from sysobjects where
name=表名 and type =’U’)
drop table 表名;
go

–当表结构不设有时
–建表语法注明
create table 表名
(
–字段阐明
列名 int identity(1,1) not null,
列名 int,
primary key clustered(id asc)
with(ignore_dup_key=off) on [primary], –主键索引注脚
constraint 外键名 foreign key(列名)

references 主表名(列名)
on update cascade–是还是不是级联操作
on delete cascade
)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’列名’;

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,
sex nvarchar(50) null,
age nvarchar(50) null,
classid int,
primary key clustered(id asc)
with(ignore_dup_key=off) on [primary], –主键索引评释
constraint t3_t4 foreign key(classid)

references test2 (id)
on update cascade
on delete cascade
)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

图片 27

CHECK约束优缺点

优点:

一、保障列数据标准和限量,能够约束数据完整性

贰、有Check约束的列能够提须求查询优化器音信之所以进级质量

缺点:

一、插入或然修改时数据不合乎约束规则,不能修改成功。

DEFAULT约束优缺点

优点:

1、使用私下认可值能够减小代码量,新扩张多少时得以不用写新扩充暗中同意值列,推行新扩展操作时时暗中认可填充。

2、较有利于开始展览总计和剖析,以及福利程序逻辑操作。

缺点:

一、使用不为NULL的私下认可值,占用了越多的存款和储蓄空间。

 

FOREIGN KEY约束优缺点

优点:

壹、保障数据的壹致性,完整性,更保证。

二、关联合检查询时,能够用到FK 的总括信息。

三、有主外键的数据库设计能够追加E帕杰罗图的可读性。

缺点:

一、删队或更新关联数据时要求做检讨,功用会十分的低。

2、手工业调数据时,会设有主从表校验,会比较麻烦。

三、批量导入数据时,会存在外键校验,需求先关闭外键约束,导入完毕再展开外键约束,操作相比较麻烦。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图