SQLServer之DEFAULT约束

CHECK节制增添准绳

1、CHECK
限制用于节制列中的值的限定。

2、Check节制通过逻辑表明式来判定数据的卓有成效,用来界定输入一列或多列的值的限量,在列中更新数据时,所要输入的剧情必需满意Check约束的准绳,不然将不能够正确输入。

3、若是对单个列定义 CHECK
约束,那么该列只允许特定的值。

4、借使对贰个表定义 CHECK
节制,那么此约束会在一定的列中对值进行限定。

DEFAULT节制增多法规

1、若在表中定义了私下认可值约束,客户在插入新的数码行时,假诺该行未有一些名数量,那么系统将默许值赋给该列,假设我们不安装暗中认可值,系统默以为NULL。

2、若是“暗许值”字段中的项替换绑定的私下认可值(以不带圆括号的款式显得卡塔 尔(英语:State of Qatar),则将唤起您撤废对暗许值的绑定,并将其替换为新的暗中认可值。

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

4、若要输入数值暗许值,请输入数值并且毫不用引号将值括起来。

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

接收SSMS数据库管理工科具增添CHECK约束

1、连接数据库,选取数据库,选择数据表-》右键点击(也许直接点击节制,右键点击,选取丰盛约束,前面步骤同样)-》接受设计。

图片 1

2、接收要丰硕节制的多少列-》右键点击-》选用CHECK限定。

图片 2

3、在CHECK限制弹出框中式茶食击增添。

图片 3

4、在CHECK限定弹出框中-》输入CHECK限制表明式-》输入CHECK限制名-》输入CHECK节制描述-》其余能够接受私下认可。

图片 4

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

图片 5

运用SSMS数据库管理工科具增加DEFAULT节制

1、连接数据库,选拔数据表-》右键点击-》接纳设计。

图片 6

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

图片 7

3、点击保存按键(恐怕ctrl+s)-》刷新表-》再一次张开表查看结果。

图片 8

运用T-SQL脚本增多CHECK限制

动用T-SQL脚本增多DEFAULT限制

当表结构存在时

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

 图片 9

图片 10

当表结构已存在时

首先剖断表中是还是不是留存暗中认可节制,若是存在则先删除暗中同意节制再增多,如果海市蜃楼则直接抬高。

语法:

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

图片 11

图片 12

当表结构不设不时

假使表结构空中楼阁,能够直接助长度大概束,能够同有时间增加叁个要么三个限定。

语法:

–假如表结构荒诞不经时加多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

 图片 13

图片 14

图片 15

始建表时增进默许约束

先是决断表是还是不是选在,即使存在则先删除表再增加,若是荒诞不经则一向抬高。

语法:

–创立新表时增添暗许限定
–数据库注明
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

图片 16

图片 17

CHECK约束优劣势

优点:

1、保障列数据标准和限量,可以约束数据完整性

2、有Check约束的列能够提须求查询优化器消息之所以晋级质量

缺点:

1、插入或然改革时数据不合乎约束准则,无法修正成功。

DEFAULT约束优劣势

优点:

1、使用私下认可值能够减掉代码量,新添多少时方可不用写新增加暗中同意值列,试行新添操作时时暗中认可填充。

2、较有利开展总计和深入分析,以至方便程序逻辑操作。

缺点:

1、使用不为NULL的私下认可值,占用了越多的蕴藏空间。

 

发表评论

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