CHECK约束会:

检查输入到记录中的值是否满足一个条件,如果不满足这个条件则对数据库做的修改不会成功。
如,一个人的年龄是不可能为负数的,一个人的入学日期不可能早于出生日期,出厂月份不可能大于12。可以在CHECK条件中使用任意有效的SQL表达式,CHECK约束对于插入、更新等任何对数据进行变化的操作都进行检查。

字段添加CHECK约束:在该字段定义后添加CHECK 表达式,几乎所有字段中都可以添加CHECK约束,即一张表中可以存在多个CHECK 约束。

数据准备:
创建了一张用于保存人员信息的表T_Person,其中字段FNumber 为人员编号,字段FName 为人员姓名,字段FAge为人员年龄,字段FWorkYear为人员工龄:

MYSQL,MSSQLServer,DB2:
CREATE TABLE T_Person (FNumber VARCHAR(20),
FName VARCHAR(20),FAge INT CHECK(FAge >0),
FWorkYear INT CHECK(FWorkYear>0))Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),FName VARCHAR2(20),
FAge NUMBER (10) CHECK(FAge >0),
FWorkYear NUMBER (10) CHECK(FWorkYear>0))

一个人的年龄和工龄显然不应该为负值的,所以为FAge和FWorkYear两个字段增加了CHECK约束“FAge>0”和“FWeight>0”。表创建完毕后执行下面的SQL语句进行测试:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear) VALUES("001","John",25,-3)

执行此SQL语句后数据库会报出下面错误信息:

INSERT 语句与CHECK 约束"CK__T_Person__FWorkY__24927208"冲突。该冲突发生于数据库"demo",表"dbo.T_Person", column "FWorkYear"。

执行下面的SQL语句则可以成功执行:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear) VALUES("001","John",25,3)

可在CHECK 约束中使用函数

如:人员编号长度要大于12,那么就需要如下编写建表语句:

MYSQL,DB2:
CREATE TABLE T_Person (FNumber VARCHAR(20) CHECK (LENGTH(FNumber)>12),
FName VARCHAR(20),FAge INT CHECK(FAge >0),
FWorkYear INT CHECK(FWorkYear>0))MSSQLServer:
CREATE TABLE T_Person (FNumber VARCHAR(20) CHECK (LEN(FNumber)>12),
FName VARCHAR(20),FAge INT CHECK(FAge >0),FWorkYear INT CHECK(FWorkYear>0))Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20) CHECK (LENGTH(FNumber)>12),
FName VARCHAR2(20),FAge NUMBER (10) CHECK(FAge >0),FWorkYear NUMBER (10) CHECK(FWorkYear>12))

表创建完毕后执行下面的SQL语句进行测试:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear) VALUES("001","John",25, 3)

将FNumber字段设置成了"001",是违反“CHECK(LENGTH(FNumber)>12)”这个CHECK约束的,所以执行此SQL语句后数据库会报出下面错误信息:

INSERT 语句与CHECK 约束"CK__T_Person__FNumbe__267ABA7A"冲突。该冲突发生于数据库"demo",表"dbo.T_Person", column "FNumber"。

而执行下面的SQL语句则可以成功执行:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear)VALUES("001001001001001","John",25,3)

直接在列定义中通过CHECK子句添加CHECK约束的方式的缺点是约束条件不能引用其他列。
如:约束“人员的工龄必须小于他的年龄”,执行下面的SQL语句:

MYSQL,DB2:
CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,FWorkYear INT CHECK(FWorkYear< FAge))MSSQLServer:
CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,FWorkYear INT CHECK(FWorkYear< FAge))Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),FName VARCHAR2(20),FAge NUMBER (10),FWorkYear NUMBER (10) CHECK(FWorkYear< FAge))

执行后,数据库会报出如下的错误信息:

表 "T_Person" 的列 "FWorkYear" 的列CHECK 约束引用了另一列。

若希望CHECK子句中的条件语句中使用其他列,则必须在CREATE TABLe 语句的末尾使用CONSTRAINT 关键字定义它。语法为:

CONSTRAINT 约束名 CHECK(约束条件)

重新编写上述的SQL语句,如下:

MYSQL,DB2:
CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,FWorkYear INT,CONSTRAINT ck_1 CHECK(FWorkYear< FAge))MSSQLServer:
CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,FWorkYear INT,CONSTRAINT ck_1 CHECK(FWorkYear< FAge))Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),FName VARCHAR2(20),FAge NUMBER (10),FWorkYear NUMBER (10),CONSTRAINT ck_1 CHECK(FWorkYear< FAge))

表创建完毕后执行下面的SQL语句进行测试:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear) VALUES("001","John",25, 30)

将FWorkYear字段设置成了30,比年龄25岁还大,这是违反“CHECK(FWorkYear<FAge)”这个CHECK约束的,所以执行此SQL语句后数据库会报出下面错误信息:

INSERT 语句与 CHECK 约束"ck_1"冲突。该冲突发生于数据库"demo",表"dbo.T_Person"。

而执行下面的SQL语句则可以成功执行:

INSERT INTO T_Person(FNumber, FName, FAge, FWorkYear) VALUES("001001001001001","John",25,3)

这种定义CHECK约束的方式几乎与定义一个复合唯一约束的方式一致。通过ALTER TABLE的方式为已经存在的数据表添加CHECK 约束。
如:在T_Person上添加新的约束:

ALTER TABLE T_Person ADD CONSTRAINT ck_2 CHECK(FAge>14)

上面的SQL语句中为约束指定了显式的名称,所以可以通过下面的SQL语句将CHECK约束ck_2删除(这个语句在MYSQL中无效):

ALTER TABLE T_Person
DROP CONSTRAINT ck_2;

http://www.taodudu.cc/news/show-6373228.html

相关文章:

  • ORACLE- check 检查约束
  • 陶哲轩career advice 翻译
  • 陶瓷天线的选型(二)
  • 计算机工程陶瓷,捏陶瓷之形,赏中华之美
  • 如何从电压范围75V-3500V中选购合适的GDT-陶瓷气体放电管-优恩
  • 看APS计划排产在陶瓷制品行业的应用
  • 陶泓达:周五黄金原油白银走势分析及操作建议
  • 陶泓达:最新黄金,原油短线交易策略!
  • 陶泓达:本周最新走势分析及操作建议
  • MJExtension使用指导
  • 陶泓达:实力指导短线交易策略!让你翻仓回本
  • 再见陶指导
  • RecyclerView的万能分割线
  • Android 分割线
  • Vue3分割线(Divider)
  • 质数/素数筛选c++超简单版写法
  • 双素数(质数)C语言程序详解
  • 统计找出一千万以内,一共有多少质数?(优化过程,效率更快)
  • (free)Windows下的stegdetect下载链接
  • 解决esp-idf-5.0编译时报错:Component “tinyusb“ does not support target esp32
  • ESP32 E (10309) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdo
  • windows平台下安装ES
  • Windows下安装ES
  • ESP32 强制门户 WEB配网
  • ESP32 ESP-IDF安装教程(windows 64位)
  • windows 安装es环境,手把手教学
  • ESET(NOD32) ESS/EAV 4.0.424.0 BE 32位 汉化正式版
  • TFT-eSPI 库在 ESP32 上的配置和使用(ESP32 for Arduino)
  • windows使用es的客户端es-head
  • 使用Aruino Ethernet使ESP32具有以太网通讯能力

五、SQL–索引/约束④(check约束)相关推荐

  1. SQL语法之 CHECK 约束

    SQL学习 学习SQL语法 SQL语法 SQL学习 SQL语法之 CHECK 约束 SQL CHECK Constraint on CREATE TABLE SQL CHECK Constraint ...

  2. SQL学习之check约束

    目录 参考源 SQL check 约束 示例数据 create table 添加 check 约束 多个字段添加约束 给 check 约束命名 alter table 时的 SQL check 约束 ...

  3. oracle check 日期大于,sql – 出生日期的CHECK约束?

    检查约束必须是确定性的.也就是说,特定行必须始终满足约束,否则它必须始终无法满足约束.但是,由于返回值不断变化,因此SYSDATE本质上是不确定的.因此,您无法定义调用SYSDATE或任何其他用户定义 ...

  4. mysql删除check约束_高级SQL特性——约束与索引

    一.约束 1.约束的作用 对表中数据进行进一步限制,保证表中数据的完整性.一致性和正确性. 2.约束的分类 1)主键约束 主键能够唯一地标识表中的一行,比如学生表中的学生id. 它的主要作用就是能够将 ...

  5. SQL约束(主键约束 primary key、外键约束 foreign key、唯一约束unique 、CHECK约束)

    注意: A.表中有数据不能创建约束 B.视图下设置后,要点击保存(只有保存后在才看的到) c   别忘了,点刷新,才会出来呀! 1.主键约束 primary key 主键是每行的唯一标识符,仅仅通过它 ...

  6. SQL CHECK 约束

    SQL CHECK 约束 CHECK 约束用于限制列中的值得范围. 如果对单个定于的CHECK 约束,那么该列只允许特定的值. 如果对一个表定于CHECK 约束,那么此约束会基于行中其他列的值在特定的 ...

  7. SQL语句 SQL Server(代码添加约束:主键约束,外键约束,默认值约束,check约束,规则约束)

    SQL语句(基于SQL Server) 约束 primary约束,unique约束,check约束 建表时 列级 create table <table name>(<column_ ...

  8. Oracle修改check约束的sql语句

    开始想修改这张表的其中一个字段的约束 check约束,百度各种说不能修改check约束??只能删掉了约束,再重新修改约束.经过各种测试得出,oracle是可以修改check约束,但是也是必须需要删掉原 ...

  9. Oracle表字段check语句,sql语句大全之SQL CHECK 约束

    SQL CHECK 约束 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约 ...

最新文章

  1. 成都工业学院计算机工程学院院长,青春的交接礼——成都工业学院计算机工程学院...
  2. 在项目中谨慎为系统类添加分类!!!!!
  3. 对于指针与malloc函数关系的研究,以及指针的赋值。
  4. 谈谈对IOC及DI的理解与思考
  5. 深拷贝与浅拷贝Object.assign()
  6. python自动保存图片_Python学习笔记:利用爬虫自动保存图片
  7. python案例实操_用案例实操学习Python ,培养编程逻辑思维
  8. 【python基础】window下python安装及配置环境变量的方法教程
  9. kakfa怎么看消息是否堆积_不停的打开微信,只为看你是否更新了消息
  10. CDH 5.15.2 离线安装
  11. C# WebApi Xml序列化问题解决方法:“ObjectContent`1”类型未能序列化内容类型“application/xml;charset=utf-8“的响应正文。...
  12. Ubuntu14.04上安装Jupyter的方法
  13. CSS3动画入门 CSS动画如何使用(举例说明)
  14. vim高亮多处,搜索多个关键词
  15. 华为鸿蒙到底是不是安卓系统套了个壳?
  16. 求素数的python程序,Python-求素数程序
  17. FPGA芯片的GTX/GTH/GTY/GTP/GTZ/GTM高速信号有什么区别?
  18. 老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
  19. PLC编程实例及经验设计法详解
  20. IDEA 搭建黑马品优购商城

热门文章

  1. 多尺度量子谐振子优化算法(MQHOA)-matlab实现demo
  2. Android studio 模拟器中只能输入英文 如何输入中文
  3. 写好标题 N倍提升你的IP
  4. 解决方案 | 亚洲诚信助力互联网行业网络安全建设
  5. Content-Type四种常见取值application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml
  6. 女朋友过生日,男子买了一条项链,女友:值不了多少钱
  7. 还不明白什么是固件吗
  8. lintcdoe: Number of Airplanes in the Sky
  9. 【Mathematica】 泰勒展开
  10. 一个真正的IT人来谈中国与印度的软件