首页 > 数据库技术 > 详细

Sql Server约束的学习二(检查约束、默认约束、禁用约束)

时间:2017-04-01 19:11:24      阅读:320      评论:0      收藏:0      [点我收藏+]

接上一篇的Sql Server约束学习一(主键约束、外键约束、唯一约束)

4、检查约束

1)检查约束的定义

  检查约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另一个列的值,只有这些列都在同一个表中,以及值是在更新或插入的同一行中。检查约束还可以用于检查列值组合是否满足某一个标准。可以使用where子句一样的规则来定义检查约束。

  检查约束条件示例如下:

技术分享

2)检查约束的创建

2.1)在创建表时创建检查约束

/**创建表时创建检查约束***/

--创建学生表--
create table Student(
    Uid int not null identity(1,1) primary key,  --主键约束--
    Name varchar(20) not null unique,  --唯一约束--
    Age int not null check(Age>=18),  --检查约束--
    TeaUid int not null foreign key references Teacher(Uid),  --外键约束--
    Notes varchar(100) null
)

执行后,结果如下图:

技术分享

2.2)在已生成表新增检查约束

/**创建表后,新增检查约束***/

--创建学生表--
create table Student(
    Uid int not null identity(1,1) primary key,  --主键约束--
    Name varchar(20) not null unique,  --唯一约束--
    Age int not null,  --检查约束--
    TeaUid int not null foreign key references Teacher(Uid),  --外键约束--
    Notes varchar(100) null
)
--创建表后,新增检查约束--
alter table Student
add constraint CK_Student_Age
check(Age>=18)           --年龄大于等于18岁

执行后,结果如下图所示:

技术分享

3)检查约束的验证

--添加符合检查条件的信息--
insert into Student(Name,Age,TeaUid) values(张小飞,18,2)
--添加不符合检查条件的信息--
insert into Student(Name,Age,TeaUid) values(李小菲,16,2)
--查询学生表信息--
select * from Student

执行后,结果如下图:

技术分享

技术分享

5、默认约束

1)默认约束的定义

  默认约束也是表定义的一个组成部分,它定义了当插入的行对于定义了默认约束的列未提供相应数据是该怎么办。可以定义一个字面值(年龄默认为0)或系统值(getdate())等。

  默认约束的特性:

     (1) 默认值只在insert语句中使用,在update、delete语句被忽略

  (2)如果在insert语句提供任意值,那就不使用默认值,若该列不提供值,则使用默认值

2)默认约束的创建

2.1)创建表时创建默认约束

/***在创建表时创建默认约束***/

--创建People表--
create table People(
    Uid int identity(1,1) primary key,  --主键约束--
    Name varchar(20) not null unique,   --唯一约束--
    HomeAdress varchar(50) not null default未填写,  --默认约束--
    Notes varchar(100) null
)

执行后,结果如下图:

技术分享

2.2) 创建表后,添加默认约束

/***在创建表后添加默认约束***/

--创建People表--
create table People(
    Uid int identity(1,1) primary key,  --主键约束--
    Name varchar(20) not null unique,   --唯一约束--
    HomeAdress varchar(50) not null,  --默认约束--
    Notes varchar(100) null
)
--添加默认约束--
alter table People
    add constraint DF_People_HomeAddress
    default 未填写 for HomeAdress

执行后,结果如下图:

技术分享

3)默认约束的验证

--不提供地址的新增信息--
insert into People values(张三)
--提供地址的新增信息--
insert into People(Name,HomeAdress) values(李四,广州市海珠区)
--查询People表--
select * from  People

执行后,结果如下图:

技术分享

6、禁用约束

1)禁用约束定义

  有时我们想暂时或永久消除约束,但sql server并没有提供删除约束的方法,只允许禁用外键约束或检查约束,不能禁用主键约束和唯一约束,而同时保持约束的完整性。

  禁用一个数据完整性规则通常是因为有无效数据了,这样的数据分为两类:

  (1)在创建约束时已经存在数据库中的数据

  (2)约束创建之后希望添加的数据

注:sql server允许禁用完整性检查一段时间来例外的无效数据做处理,然后重新启用完整性。

2)禁用约束创建

2.1)创建约束时,忽略之前不满足数据

--创建People表--
create table People(
    Uid int identity(1,1) primary key,  --主键约束--
    Name varchar(20) not null unique,   --唯一约束--
    Age int not null,
    Notes varchar(100) null
)
--添加年龄小于18岁数据--
insert into People(Name,Age) values(小风,12)
--查询People表--
select * from People

未加检查约束,执行之后,结果如下:

技术分享

当我们执行添加检查约束,发现添加不了

--添加年龄必须大于等于18岁检查约束--
alter table People
add constraint CK_People_Age 
check(Age>=18)

执行之后,结果如下图:

技术分享

那么如何忽略之前不满足的数据呢?

--添加年龄必须大于等于18岁检查约束--
alter table People
    with nocheck  --不检查之前数据
    add constraint CK_People_Age   --检查约束
    check(Age>=18)

执行后,结果如下图:

技术分享

2.2)临时禁用已存在的约束

Sql Server约束的学习二(检查约束、默认约束、禁用约束)

原文:http://www.cnblogs.com/xielong/p/6657126.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!