CHECK约束添加规则

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

2、Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。

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

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

使用SSMS数据库管理工具添加CHECK约束

1、连接数据库,选择数据库,选择数据表-》右键点击(或者直接点击约束,右键点击,选择添加约束,后面步骤相同)-》选择设计。

2、选择要添加约束的数据列-》右键点击-》选择CHECK约束。

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

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

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

使用T-SQL脚本添加CHECK约束

当表结构存在时

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

当表结构不存在时

如果表结构不存在,可以直接添加约束,可以同时添加一个或者多个约束。

语法:

--如果表结构不存在时添加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

CHECK约束优缺点

优点:

1、保证列数据规范和范围,可以约束数据完整性

2、有Check约束的列可以提供给查询优化器信息从而提升性能

缺点:

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

SQLServer之CHECK约束的更多相关文章

  1. SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束

    一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...

  2. SQLServer之修改CHECK约束

    使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...

  3. SQLServer与MySQL约束/索引命名的一些差异总结

    约束是数据库完整性的保证,主要分为:主键/外键/唯一键/默认值/check等类别,约束是一个逻辑概念,表示数据的某些特性(不能为空,唯一,必须满足某些条件等等),索引是一个逻辑与物理概念的结合,逻辑上 ...

  4. 约束4:唯一约束,Check约束和null

    大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown.而NULL值在唯一 ...

  5. SQL Server中使用Check约束提升性能

        在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计划的好坏直接关乎执行性能.     在查询优化器生成执行计划过程中,需要参考元数据来尽可能生成高效的执行计划, ...

  6. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  7. oracle之check约束小结

    一下是Ocp考试指导中,对于oracle约束的描述: The constraint types supported by the Oracle database are as follows:UNIQ ...

  8. SqlServer基础:约束

    为了减少输入错误和保证数据库数据的完整性,可以对字段设置约束,例如考试成绩,其范围应该为0-100.约束是为了保证数据的完整性而实现的一套机制,约束包括:主键约束.外键约束.Unique约束.Chec ...

  9. oracle 序列 ,check约束

    ====================序列 //查询当前用户序列 select * from user_sequences //查询所有序列 select * from all_sequences; ...

随机推荐

  1. Java接口的实例应用:致敬我的偶像——何塞·穆里尼奥

    文/沉默王二 曹操在<短歌行>中为杜康酒打过一个价值一亿个亿的广告——“何以解忧,唯有杜康”,我替曹操感到惋惜的是他本人并不会收到这笔不菲的代言费.想一想,要是三国时期的明星人物们有这个代 ...

  2. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  3. vue组件如何被其他项目引用

    自己写的vue组件怎么才能让其他人引用呢,或者是共用组件如何让其他项目引用.本文就粗细的介绍下,如有疑问欢迎共同讨论.在这里你能了解下如下知识点: 1. 如何发布一个包到npmjs仓库上 2.如何引用 ...

  4. oracle常用命令收集

    1.查看监听状态 lsnrctl status 2.启动监听 lsnrctl start 3.关闭监听 lsnrctl stop 4.以数据库管理员登录 sqlplus / as sysdba 5.手 ...

  5. Python Bs4 回顾

    BeautifulSoup bs4主要使用find()方法和find_all()方法来搜索文档. find()用来搜索单一数据,find_all()用来搜索多个数据 find_all()与find() ...

  6. 前两天做项目遇到了sqlserver最大连接数 Max Pool Size 的问题

    前言:出现这种问题使因为程序对connection的回收出现了问题,是因为你的代码出出现了过多new connection(),这种情况还是你的代码问题,如果不想把问题归根于程序,那你就可以改变con ...

  7. 从锅炉工到AI专家(3)

    剖析第一个例子 学习<机器学习>,很多IT高手是直接去翻看TensorFlow文档,但碰壁的很多.究其原因,TensorFlow的文档跨度太大了,它首先假设你已经对"机器学习&q ...

  8. 前端笔记之JavaScript(一)初识JavaScript

    一.JavaScript简介 1.1网页分层 web前端一共分三层: 结构层 HTML         : 负责搭建页面结构 样式层 CSS          : 负责页面的美观 行为层 JavaSc ...

  9. 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(3)- 音频显示实现(Matplotlib, NumPy1.15.0)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具Jays-PySPEECH诞生之音频显示实现. 音频显示是Jays-PySPEECH的主要功能,Jays-PySPEECH借 ...

  10. msf中exploit的web_delivery模块

    背景:目标设备存在远程文件包含漏洞或者命令注入漏洞,想在目标设备上加载webshell,但不想在目标设备硬盘上留下任何webshell文件信息 解决思路:让目标设备从远端服务器加载webshell代码 ...