SQLServer之DEFAULT约束

FOREIGN KEY 约束只能列出一个引用列,则此值必须在被引用列中存在,请输入数值并且不要用引号将值括起来,请输入对象/函数的名称并且不要用引号将名称括起来,用来限制输入一列或多列的值的范围,选择数据表-》右键点击(或者直接点击约束,向表中添加字段,添加唯一约束

图片 27

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 2015 (13.x) 将可在单身的表中引用的别的表和列(传入引用)的数量限制从
253 提升至 10,000。 (包容性品级至少必须为
130。)数量限制的进步带来了下列约束:

DELETE 和 UPDATE
DML 操作扶助胜出 253 个外键援用。 不援助MEENCOREGE 操作。

对自己举行外键援引的表仍只可以进展 254个外键援引。

列存款和储蓄索引、内部存款和储蓄器优化表和 Stretch Database
暂不支持开始展览当先 253 个外键引用。

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

9、固然在 CLPRADO用户定义类型的列上定义外键,则该品种的达成必须援救二进制排序。

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逍客图的可读性。

缺点:

1、删队或更新关联数据时供给做检查,功效会异常低。

2、手工业调数据时,会存在主从表校验,会比较费劲。

3、批量导入数据时,会存在外键校验,要求先关闭外键约束,导入完结再张开外键约束,操作比较艰苦。

 

DEFAULT约束优短处

优点:

1、使用暗许值能够收缩代码量,新增扩张少时得以不用写新添暗许值列,施行新扩展操作时时暗中同意填充。

2、较有助于开展计算和剖析,以及便于程序逻辑操作。

缺点:

1、使用不为NULL的暗中认可值,占用了越来越多的储存空间。

 

CHECK约束优瑕疵

优点:

1、保证列数据正式和范围,能够约束数据完整性

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

缺点:

1、插入或然涂改时数据不相符约束准绳,不能够修改成功。

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

4:加多主键