SQLServer之CHECK约束

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
约束的实在多少依旧受硬件配置以及数据库和应用程序设计的限量。 表最多能够将 2五拾叁个其余表和列作为外键援用(传出引用)。 SQL
Server 二〇一四 (13.x) 将可在单身的表中援用的任何表和列(传入援引)的数目限制从
253 进步至 10,000。 (包容性等级至少必须为
130。)数量限制的增高带来了下列约束:

DELETE 和 UPDATE
DML 操作扶助胜出 253 个外键引用。 不支持ME奥迪Q3GE 操作。

对本人进行外键援用的表仍只好实行 2五17个外键援引。

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

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

9、假诺在 CL昂科雷用户定义类型的列上定义外键,则该项目标落到实处必须援救二进制排序。

10、仅当 FOREIGN
KEY
约束援用的主键也定义为品种 varchar(max) 时,技巧在此约束中使用项目为varchar(max) 的列。

DEFAULT约束增添准则

1、若在表中定义了暗中认可值约束,用户在插入新的数目行时,如若该行未有一点点名数量,那么系统将私下认可值赋给该列,如若大家不设置私下认可值,系统默以为NULL。

2、如果“暗中认可值”字段中的项替换绑定的私下认可值(以不带圆括号的款式彰显),则将唤起您拨冗对默许值的绑定,并将其替换为新的暗许值。

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

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

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

CHECK约束增加准绳

1、CHECK
约束用于限制列中的值的范围。

2、Check约束通过逻辑表明式来剖断数据的卓有成效,用来限制输入一列或多列的值的界定,在列中创新数据时,所要输入的剧情必须满意Check约束的规范化,不然将无法正确输入。

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

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

1:向表中加多字段

采纳SSMS数据库管理工科具加多外键约束

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

1、连接数据库,展开要增加外键的数额表-》右键点击-》选拔设计。

图片 1

2、在表设计窗口-》采纳要加多外键的数量行-》右键点击-》选拔事关。

图片 2

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

图片 3

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

图片 4

5、在表和列窗口中-》输入外键名-》在左手选拔主表和关系的列-》在左边选取从表和当作外键的列-》点击明确。

图片 5

6、在外键关系窗口中-》可选择丰盛大概不增添外键描述-》可挑选丰硕或许不加多修改可能去除数据时级联操作-》可选择丰硕只怕不添抓牢制外键约束-》可挑选丰硕或然不加多强制用于复制-》点击关闭。

图片 6

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

图片 7

图片 8

应用SSMS数据库管理工科具增多DEFAULT约束

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

图片 9

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

图片 10

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

图片 11

选取SSMS数据库管理工科具增加CHECK约束

1、连接数据库,选拔数据库,采取数据表-》右键点击(或然直接点击约束,右键点击,采用丰盛约束,前边步骤同样)-》选拔设计。

图片 12

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

图片 13

3、在CHECK约束弹出框中式点心击增加。

图片 14

4、在CHECK约束弹出框中-》输入CHECK约束表明式-》输入CHECK约束名-》输入CHECK约束描述-》别的能够选取默许。

图片 15

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

图片 16

Alter table [表名] add [列名] 类型

接纳T-SQL脚本加多外键约束

应用T-SQL脚本加多DEFAULT约束

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

2:  删除字段

当表结构已存在时

万一要增加约束的表已存在外键约束,须求先删除却键约束再加多外键约束。假设海市蜃楼外键约束能够拉长外键约束。

语法:

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

图片 17

当表结构已存在时

先是判定表中是或不是留存暗中认可约束,假诺存在则先删除默许约束再增多,如若不设有则一贯抬高。

语法:

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

图片 18

图片 19

当表结构存在时

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

 图片 20

图片 21

Alter table [表名]  drop column [列名]

在新表中创设外键

 语法:

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

图片 22

创办表时拉长私下认可约束

第一判定表是不是选在,借使存在则先删除表再增多,即使空中楼阁则直接助长。

语法:

–成立新表时加多暗中认可约束
–数据库申明
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

图片 23

图片 24

当表结构海市蜃楼时

一旦表结构不设有,能够一直抬高约束,能够何况加多贰个要么多少个约束。

语法:

–借使表结构不设一时增多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

 图片 25

图片 26

图片 27

3:  修改表中字段类型 (能够修改列的门类,是不是为空)

FOREIGN KEY约束优缺点

优点:

1、保证数据的一致性,完整性,更可信。

2、关联合检查询时,可以用到FK 的总结信息。

3、有主外键的数据库设计能够扩展E中华V图的可读性。

缺点:

1、删队或更新关联数据时必要做检讨,效能会十分低。

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

3、批量导入数据时,会设有外键校验,供给先关闭外键约束,导入实现再打开外键约束,操作相比费劲。

 

DEFAULT约束优瑕玷

优点:

1、使用暗中同意值能够减去代码量,新增扩展少时得以不用写新扩充默许值列,实践新增添操作时时默许填充。

2、较有助于开始展览总结和深入分析,以及福利程序逻辑操作。

缺点:

1、使用不为NULL的暗中同意值,占用了越来越多的囤积空间。

 

CHECK约束优弱点

优点:

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

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

缺点:

1、插入恐怕修改时数据不适合约束法规,不可能修改成功。

Alter table [表名] alter column [列名] 类型

4:增多主键

Alter table [表名] add constraint [ 约束名] primary key( [列名])

5:增添独一约束

Alter table [表名] add constraint [ 约束名] unique([列名])

6:增加表中某列的默许值

Alter table [表名] add constraint [约束名] default(默认值) for
[列名]
7:增多约束

Alter table [表名] add constraint [约束名] check (内容)

8:增多外键约束

 Alter table [表名] add constraint [约束名]  foreign key(列名)
referencese 另一表名(列名)

9:删除约束

Alter table [表名] drop constraint [约束名] 

10:重命名表

exec sp_rename ‘[原表名]’,'[新表名]’

11:重命名列名

exec sp_rename ‘[表名].[列名]’,'[表名].[新列名]’

 

创设注释(N’user’, N’dbo’, N’TABLE’ 为一定的写法)

12:为表增添描述音信
EXECUTE sp_addextendedproperty N’MS_Description’, ‘人士新闻表’,
N’user’, N’dbo’, N’TABLE’, N’表名’, NULL, NULL

13:为字段Username增多描述音讯
EXECUTE sp_addextendedproperty N’MS_Description’, ‘姓名’, N’user’,
N’dbo’, N’TABLE’, N’表名’, N’column’, N’Username’

14:为字段Sex加多描述音讯
EXECUTE sp_addextendedproperty N’MS_Description’, ‘性别’, N’user’,
N’dbo’, N’TABLE’, N’表名’, N’column’, N’Sex’

15:更新表中列UserName的陈说属性:
EXEC sp_updateextendedproperty
‘MS_Description’,’新的姓名’,’user’,dbo,’TABLE’,’表名’,’column’,’UserName’

16:删除表中列UserName的陈述属性:
EXEC sp_dropextendedproperty
‘MS_Description’,’user’,dbo,’TABLE’,’表名’,’column’,’Username’

发表评论

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