SQLServer之修改CHECK约束

运用SSMS数据库管理工具修改CHECK约束

1、打开数据库,选拔数据表-》右键点击-》采纳设计(或者举行约束,选用约束,右键点击,拔取修改,后边步骤一样)。

997755.com澳门葡京 1

997755.com澳门葡京 2

2、拔取要修改的数额列-》右键点击-》选拔CHECK约束。

997755.com澳门葡京 3

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

997755.com澳门葡京 4

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

997755.com澳门葡京 5

CHECK约束添加规则

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

2、Check约束通过逻辑表明式来判断数据的实用,用来界定输入一列或多列的值的界定,在列中更新数据时,所要输入的情节必须知足Check约束的原则,否则将不可以正确输入。

SQLServer之修改CHECK约束。3、假如对单个列定义 CHECK
约束,那么该列只同意特定的值。

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

DEFAULT约束添加规则

1、若在表中定义了默认值约束,用户在插入新的多少行时,倘若该行没有点名数量,那么系统将默认值赋给该列,即便我们不安装默认值,系统默认为NULL。

2、倘使“默认值”字段中的项替换绑定的默认值(以不带圆括号的款式呈现),则将唤起您解除对默认值的绑定,并将其替换为新的默认值。

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

4、若要输入数值默认值,请输入数值并且永不用引号将值括起来。

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

FOREIGN KEY约束添加规则

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

2、如果在 FOREIGN
KEY 约束的列中输入非 NULL
值,则此值必须在被引用列中设有;否则,将回来违反外键约束的错误音信。 若要保证验证了咬合外键约束的装有值,请对持有参与列指定
NOT NULL。

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

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

5、在列级指定的
FOREIGN KEY 约束只能列出一个引用列。 此列的数据类型必须与概念约束的列的数据类型相同。

6、在表级指定的
FOREIGN KEY 约束所兼有的引用列数目必须与约束列列表中的列数相同。 每个引用列的数据类型也务必与列表中相应列的数据类型相同。

7、对于表可包含的引用其他表的 FOREIGN KEY
约束的多少或其余表所拥有的引用特定表的 FOREIGN KEY 约束的多寡, 数据库引擎 都未曾预定义的限量。 虽然如此,可利用的 FOREIGN KEY
约束的骨子里多少如故受硬件配备以及数据库和应用程序设计的界定。 表最多能够将 253
个其他表和列作为外键引用(传出引用)。 SQL
Server 2016 (13.x) 将可在单身的表中引用的别样表和列(传入引用)的多寡限制从
253 提升至 10,000。 (兼容性级别至少必须为
130。)数量限制的加强带来了下列约束:

DELETE 和 UPDATE
DML 操作襄助胜出 253 个外键引用。 不援助MERGE 操作。

对自家举行外键引用的表仍只可以举行 253
个外键引用。

列存储索引、内存优化表和 Stretch Database
暂不扶助开展超过 253 个外键引用。

8、对于临时表不强制 FOREIGN KEY 约束。

9、假如在 CLR
用户定义类型的列上定义外键,则该项目标兑现必须辅助二进制排序。

10、仅当 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’test1′,
N’CONSTRAINT’, N’u_check2′;
go

997755.com澳门葡京 6

997755.com澳门葡京 7

选拔SSMS数据库管理工具添加CHECK约束

1、连接数据库,选取数据库,采纳数据表-》右键点击(或者直接点击约束,右键点击,选取丰硕约束,后边步骤一样)-》采用设计。

997755.com澳门葡京 8

2、采纳要加上约束的数量列-》右键点击-》选拔CHECK约束。

997755.com澳门葡京 9

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

997755.com澳门葡京 10

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

997755.com澳门葡京 11

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

997755.com澳门葡京 12

运用SSMS数据库管理工具添加DEFAULT约束

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

997755.com澳门葡京 13

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

997755.com澳门葡京 14

3、点击保存按钮(或者ctrl+s)-》刷新表-》再一次打开表查看结果。

997755.com澳门葡京 15

接纳SSMS数据库管理工具添加外键约束

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

1、连接数据库,打开要添加外键的数码表-》右键点击-》选取设计。

997755.com澳门葡京 16

2、在表设计窗口-》拔取要添加外键的数据行-》右键点击-》采取事关。

997755.com澳门葡京 17

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

997755.com澳门葡京 18

4、添加完毕后-》首先修改表和列规范。

997755.com澳门葡京 19

5、在表和列窗口中-》输入外键名-》在左边接纳主表和涉嫌的列-》在右手拔取从表和当作外键的列-》点击确定。

997755.com澳门葡京 20

6、在外键关系窗口中-》可挑选充足或者不添加外键描述-》可选择丰硕或者不添加修改或者去除数据时级联操作-》可接纳丰裕或者不添加强制外键约束-》可挑选丰富或者不添加强制用于复制-》点击关闭。

997755.com澳门葡京 21

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

997755.com澳门葡京 22

997755.com澳门葡京 23

CHECK约束修改优缺点

优点:

1、修改数据库CHECK约束可以保证数据的规范性和完整性。

缺点:

1:修改约束的表设计器使用规则时,可能会滋生原有数据与约束的冲突。

 

应用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

 997755.com澳门葡京 24

997755.com澳门葡京 25

当表结构已存在时

第一判断表中是否存在默认约束,假若存在则先删除默认约束再添加,假设不存在则直接助长。

语法:

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]997755.com澳门葡京,
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,
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约束优缺点

优点:

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

2、有Check约束的列可以提供给查询优化器消息之所以升级性能

缺点:

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

DEFAULT约束优缺点

优点:

1、使用默认值可以减去代码量,新增多少时可以不用写新增默认值列,执行新增操作时时默认填充。

2、较有利开展总结和分析,以及方便程序逻辑操作。

缺点:

1、使用不为NULL的默认值,占用了更多的仓储空间。

 

FOREIGN KEY约束优缺点

优点:

1、保证数据的一致性,完整性,更牢靠。

2、关联查询时,可以用到FK 的总结新闻。

3、有主外键的数据库设计可以追加ER图的可读性。

缺点:

1、删队或更新关联数据时需要做检讨,功能会很低。

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

3、批量导入数据时,会存在外键校验,需要先关闭外键约束,导入完成再打开外键约束,操作相比较费心。

 

相关文章

发表评论

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

*
*
Website