SQLServer之修改CHECK约束

选择SSMS数据库管理工科具修改CHECK约束

一、展开数据库,选拔数据表-》右键点击-》接纳设计(只怕拓展约束,选拔约束,右键点击,选拔修改,前边步骤同样)。

997755.com澳门葡京 1

997755.com澳门葡京 2

二、采纳要修改的数据列-》右键点击-》选用CHECK约束。

997755.com澳门葡京 3

三、在CHECK约束弹出框中-》选用要修改的束缚-》输入约束说明式-》输入约束名和约束描述-》采用表设计器规则-》点击关闭。

997755.com澳门葡京 4

 4、点击保存开关(也许ctrl+s)-》刷新表查看修改结果。

997755.com澳门葡京 5

CHECK约束增加规则

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

二、Check约束通过逻辑表达式来推断数据的卓有效用,用来界定输入壹列或多列的值的限定,在列中更新数据时,所要输入的内容必须满足Check约束的原则,不然将不恐怕准确输入。

三、即使对单个列定义 CHECK
约束,那么该列只允许特定的值。

4、纵然对四个表定义 CHECK
约束,那么此约束会在特定的列中对值实行界定。

DEFAULT约束增添规则

一、若在表中定义了默许值约束,用户在插入新的数额行时,如若该行没有点名数量,那么系统将暗中同意值赋给该列,假若我们不设置私下认可值,系统默以为NULL。

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

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

四、若要输入数值私下认可值,请输入数值并且毫不用引号将值括起来。

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

FOREIGN KEY约束增加规则

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

二、要是在 FOREIGN
KEY 约束的列中输入非 NULL
值,则此值必须在被引用列中设有;不然,将赶回违反外键约束的错误新闻。 若要确认保证验证了咬合外键约束的持有值,请对具有参加列钦定NOT NULL。

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

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

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

六、在表级钦点的
FOREIGN KEY 约束所享有的引用列数目必须与约束列列表中的列数同样。 各个引用列的数据类型也必须与列表中相应列的数据类型一样。

7、对于表可包括的引用别的表的 FOREIGN KEY
约束的数码或任何表所具备的引用特定表的 FOREIGN KEY 约束的数额, 数据库引擎 都未有预约义的限量。 固然如此,可应用的 FOREIGN KEY
约束的骨子里数据依旧受硬件配备以及数据库和应用程序设计的范围。 表最多能够将 2五一个其余表和列作为外键引用(传出引用)。 SQL
Server 2016 (13.x) 将可在单身的表中引用的别的表和列(传入引用)的数码限制从
二伍三 升高至 拾,000。 (兼容性等第至少必须为
130。)数量限制的增长带来了下列约束:

DELETE 和 UPDATE
DML 操作协助胜出 25三 个外键引用。 不支持ME福睿斯GE 操作。

对自身进行外键引用的表仍只可以进展 25一个外键引用。

列存款和储蓄索引、内部存款和储蓄器优化表和 Stretch Database
暂不匡助开展超过 二伍3 个外键引用。

八、对于一时半刻表不强制 FOREIGN KEY 约束。

九、假若在 CL汉兰达用户定义类型的列上定义外键,则该品种的兑现必须扶助二进制排序。

十、仅当 FOREIGN
KEY
约束引用的主键也定义为品种 varchar(max) 时,才具在此约束中利用项目为varchar(max) 的列。

行使T-SQL脚本修改CHECK约束

CHECK约束修改规则必须首先删除现成的CHECK封锁,然后利用新定义再度创制,手艺动用Transact-SQL修改CHECK约束。

语法:

–修改check约束
use 数据库名
go

–如若封锁存在则先删除
if exists(select * from sysobjects where
name=约束名)
alter table 表名 drop constraint
约束名;
go

–增添封锁
alter table 表名
–with check
–该约束是或不是选取于现成数量,with check表示应用于现存数量,with
nocheck代表不选择于现成数据
add constraint 约束名
check
not for replication
–当复制代理在表中插入或更新数据时,禁止使用该约束。
(约束表达式);
go

–向表中增多新数据或更新表中存活数量时是还是不是禁止使用该约束。check代表校验,nocheck代表不校验
–alter table 表名
–check
–constraint 表名;
–go

–增加check约束描述
execute sp_addextendedproperty
N’MS_Description’, N’约束描述’, N’SCHEMA’, N’dbo’, N’TABLE’, N’表名’,
N’CONSTRAINT’, N’约束名’;
go

示例:

–修改check约束
use testss
go

–借使封锁存在则先删除
if exists(select * from sysobjects where
name=’u_check2′)
alter table test1 drop constraint
u_check2;
go

–加多封锁
alter table test1
–with check
–该约束是不是使用于现存数量,with check表示应用于现成数据,with
nocheck代表不选拔于现存数量
add constraint u_check2
check
not for replication
–当复制代理在表中插入或更新数据时,禁止使用该约束。
(height>=100 and height
<=200);
go

–向表中加多新数据或更新表中幸存数据时是还是不是禁止使用该约束。check表示校验,nocheck表示不校验
–alter table test1
–check
–constraint u_check2;
–go

–加多check约束描述
execute sp_addextendedproperty
N’MS_Description’, N’修改约束’, N’SCHEMA’, N’dbo’, N’TABLE’, N’test一’,
N’CONSTRAINT’, N’u_check2′;
go

997755.com澳门葡京 6

997755.com澳门葡京 7

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

一、连接数据库,选取数据库,采用数据表-》右键点击(或许直接点击约束,右键点击,选拔丰硕约束,前面步骤一样)-》选用设计。

997755.com澳门葡京 8

二、选取要增加约束的数码列-》右键点击-》选拔CHECK约束。

997755.com澳门葡京 9

三、在CHECK约束弹出框中式点心击增添。

997755.com澳门葡京 10

四、在CHECK约束弹出框中-》输入CHECK约束表明式-》输入CHECK约束名-》输入CHECK约束描述-》别的可以选拔默许。

997755.com澳门葡京 11

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

997755.com澳门葡京 12

动用SSMS数据库管理工科具加多DEFAULT约束

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

997755.com澳门葡京 13

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

997755.com澳门葡京 14

三、点击保存开关(或然ctrl+s)-》刷新表-》再度展开表查看结果。

997755.com澳门葡京 15

行使SSMS数据库管理工科具增添外键约束

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

壹、连接数据库,张开要增加外键的数据表-》右键点击-》选用设计。

997755.com澳门葡京 16

二、在表设计窗口-》选拔要增加外键的数额行-》右键点击-》采纳涉及。

997755.com澳门葡京 17

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

997755.com澳门葡京 18

四、增添落成后-》首先修改表和列标准。

997755.com澳门葡京 19

⑤、在表和列窗口中-》输入外键名-》在右边选拔主表和关系的列-》在右手采纳从表和作为外键的列-》点击鲜明。

997755.com澳门葡京 20

陆、在外键关系窗口中-》可挑选丰富或然不增加外键描述-》可选用丰盛也许不增添修改或许去除数据时级联操作-》可挑选丰硕或然不添坚实制外键约束-》可接纳丰裕恐怕不添抓实制用于复制-》点击关闭。

997755.com澳门葡京 21

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

997755.com澳门葡京 22

997755.com澳门葡京 23

CHECK约束修改优缺点

优点:

1、修改数据库CHECK约束能够有限支撑数据的规范性和完整性。

缺点:

一:修改约束的表设计器使用规则时,只怕会挑起原有数据与约束的顶牛。

 

选取T-SQL脚本增多CHECK约束

应用T-SQL脚本增添DEFAULT约束

选拔T-SQL脚本加多外键约束

当表结构存在时

增加CHECK约束时首先校验约束是不是已存在,要是存在应该是先删除再增添,假使不存在则平素抬高。

语法:

— 增添1个暗中认可约束
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

 997755.com澳门葡京 24

997755.com澳门葡京 25

当表结构已存在时

SQLServer之修改CHECK约束。首先判别表中是不是存在暗许约束,倘若存在则先删除暗许约束再增多,如若不存在则直接助长。

语法:

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

997755.com澳门葡京 26

997755.com澳门葡京 27

当表结构已存在时

假使要增加约束的表已存在外键约束,须要先删除了那一个之外键约束再增添外键约束。如若不存在外键约束能够增进外键约束。

语法:

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

997755.com澳门葡京 28

当表结构不设有时

举个例子表结构不存在,能够直接助长约束,能够同时增加二个要么多少个约束。

语法:

–假若表结构不存在时加多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

 997755.com澳门葡京 29

997755.com澳门葡京 30

997755.com澳门葡京 31

始建表时增加私下认可约束

第三剖断表是不是选在,借使存在则先删除表再增添,倘若不存在则直接助长。

语法:

–创造新表时增加暗许约束
–数据库注脚
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,
997755.com澳门葡京,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

997755.com澳门葡京 32

997755.com澳门葡京 33

在新表中开创外键

 语法:

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

997755.com澳门葡京 34

CHECK约束优缺点

优点:

一、保证列数据标准和界定,能够约束数据完整性

二、有Check约束的列能够提供给查询优化器消息之所以进级质量

缺点:

1、插入或许修改时数据不合乎约束规则,无法修改成功。

DEFAULT约束优缺点

优点:

1、使用默许值能够削减代码量,新添多少时得以不用写新增添暗中认可值列,实施新添操作时时暗中同意填充。

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

缺点:

一、使用不为NULL的默许值,占用了更加多的蕴藏空间。

 

FOREIGN KEY约束优缺点

优点:

壹、保险数据的一致性,完整性,更有限扶助。

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

叁、有主外键的数据库设计能够追加E奥迪Q5图的可读性。

缺点:

1、删队或更新关联数据时必要做检查,功能会相当低。

二、手工业调数据时,会存在主从表校验,会相比较麻烦。

③、批量导入数据时,会存在外键校验,须要先关闭外键约束,导入实现再张开外键约束,操作相比麻烦。

 

相关文章

发表评论

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

*
*
Website