ca888会员登录SQLServer之CHECK约束

2019-03-26 18:43栏目:程序人生

DEFAULT约束优缺点

优点:

一 、使用默许值可以削减代码量,新增多少时能够不用写新增私下认可值列,执行新增操作时时暗许填充。

贰 、较便宜开始展览总结和剖析,以及便于程序逻辑操作。

缺点:

壹 、使用不为NULL的私下认可值,占用了越来越多的囤积空间。

 

CHECK约束优缺点

优点:

壹 、有限支撑列数据标准和范围,能够约束数据完整性

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

缺点:

壹 、插入也许涂改时数据不切合约束规则,不可能修改成功。

FOREIGN KEY约束优缺点

优点:

壹 、有限支撑数据的一致性,完整性,更可信。

二 、关联查询时,能够用到FK 的总括音讯。

叁 、有主外键的数据库设计能够追加E福睿斯图的可读性。

缺点:

① 、删队或更新关联数据时索要做检查,效能会相当的低。

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

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

 

 

当表结构已存在时

先是判断表中是不是存在暗中认可约束,假使存在则先删除私下认可约束再添加,要是不设有则间接助长。

语法:

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

ca888会员登录 1

ca888会员登录 2

CHECK约束添加规则

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

二 、Check约束通过逻辑表明式来判断数据的实用,用来限制输入一列或多列的值的界定,在列中更新数据时,所要输入的内容必须满意Check约束的规则,不然将不能正确输入。

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

肆 、如若对叁个表定义 CHECK 约束,那么此约束会在特定的列中对值举办限制。

在新表中创造外键

 语法:

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',
ca888会员登录,@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

ca888会员登录 3

 

版权声明:本文由ca888发布于程序人生,转载请注明出处:ca888会员登录SQLServer之CHECK约束