精华内容
下载资源
问答
  • CHECK约束

    2018-10-21 01:35:00
    CHECK约束会检查输入到记录中的值是否满足一个条件,如果不满足这个条件则对数据库做的修改不会成功。比如,一个人的年龄是不可能为负数的,一个人的入学日期不可能早于出生日期,出厂月份不可能大于12。可以在CHECK...

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

    在字段定义后添加CHECK 表达式就可以为这个字段添加CHECK约束,几乎所有字段中都可以添加CHECK约束,也就是一张表中可以存在多个CHECK 约束。

    下面的SQL语句创建了一张用于保存人员信息的表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)
    

    因为这里将FWorkYear字段设置成了-3,这是违反“CHECK(FWorkYear>0)”这个CHECK约束,所以在数据库中执行此SQL语句后数据库会报出下面错误信息:

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

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

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

    除了可以在CHECK 约束中使用常量表达式之外,还可以在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 约束"CKT_PersonFNumbe__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))
    

    执行这个SQL语句以后,数据库会报出如下的错误信息:

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

    出现这个错误的原因是因为在这种方式定义的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 约束。下面的SQL语句在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;

    转载于:https://www.cnblogs.com/yuyu666/p/9823696.html

    展开全文
  • CHECK 约束

    2019-06-13 11:31:00
    CHECK 约束https://blog.csdn.net/qq61394323/article/details/26091875 转载于:https://www.cnblogs.com/LNCC-ZhangXiang/p/11015209.html

    CHECK 约束 https://blog.csdn.net/qq61394323/article/details/26091875

    转载于:https://www.cnblogs.com/LNCC-ZhangXiang/p/11015209.html

    展开全文
  • check约束

    2019-10-02 16:27:32
    来自:http://www.cnblogs.com/kissdodog/archive/2013/05/31/3109509.html 转载于:https://www.cnblogs.com/SeNaiTes/p/8717758.html

    来自:http://www.cnblogs.com/kissdodog/archive/2013/05/31/3109509.html

     

    转载于:https://www.cnblogs.com/SeNaiTes/p/8717758.html

    展开全文
  • check 约束

    2013-07-21 21:20:38
    2013-07-21_211349.jpg
    展开全文
  • mysql的check约束在当前mysql版本中依然是个摆设(mysql版本5.7.9)那么要怎么取现救国,实现类似check约束的功能呢?解决方案:1.使用触发器,来完成类似check的约束验证2.使用set或enum方式来完成字符串的值范围check...
  • check约束的文档

    2012-11-20 13:31:13
    check约束
  • CHECK约束会检查输入到记录中的值是否满足一个条件,如果不满足这个条件则对数据库做的修改不会成功。比如,一个人的年龄是不可能为负数的,一个人的入学日期不可能早于出生日期,出厂月份不可能大于12。可以在CHECK...
  • MySQL的SQL中CHECK约束的支持问题前言最近在创建MySQL表的时候,对于建表要求给的CHECK约束不是很清楚,就上网查了一下MySQL的CHECK约束。结果网上的回答通过实例告诉我MySQL能接收CHECK,但接收后不解析,也就是说...
  • SQL CHECK约束

    2020-06-08 18:19:06
    SQL CHECK约束 一、 说明 本文主要讲一下SQL的CHECK约束有关的内容。 二、 所用工具 SQL 数据库 三、 内容 1.CHECK 约束说明 用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 2....
  • 在数据库中,CHECK 约束是指约束表中某一个或者某些列中可接受的数据值或者数据格式(用于限制列中的值的范围)。在一些情况下,我们需要字段在指定范围的输入,例如:性别只能输入 '男'或者'女',余额只能大于0等条件...
  • mysql check_SQL CHECK 约束

    2021-01-18 20:03:38
    SQL CHECK 约束SQL CHECK 约束CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。...
  • MySQL使用check约束的方法:1、如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,可以将该字段的类型设置为enum类型或set类型。2、如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,使用...
  • MySQL中CHECK约束无效查看表中的约束方法一:mysql>SELECTCONSTRAINT_CATALOG,CONSTRAINT_SCHEMA,CONSTRAINT_NAME,TABLE_SCHEMA,TABLE_NAME,CONSTRAINT_TYPEFROMinformation_schema.TABLE_CONSTRAINTSWHERETABLE_...
  • SQL CHECK 约束

    千次阅读 2019-01-27 10:05:03
    SQL CHECK 约束 CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。 CREATE ...
  • MySQL中的check约束不同于ORACLE那么方便,check数量较少的可以使用ENUM来进行类似check约束的检查。例:CREATE TABLE test(no ENUM('0','1','2','3','4','5'));注意的问题:INSERT INTO test VALUES (5); -- 真正写...
  • 现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(MySQL 版本 >= 8.0.16)mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));Query OK, 0 rows affected ...
  • MySQL中的check约束不同于ORACLE那么方便,check数量较少的可以使用ENUM来进行类似check约束的检查。例:CREATE TABLE test(no ENUM('0','1','2','3','4','5'));注意的问题:INSERT INTO test VALUES (5); -- 真正写...
  • Oracle Check约束

    千次阅读 2019-01-08 20:53:53
    最近做一份数据库的任务,发现MySQL中不支持在创建表定义字段时使用check约束,如果要在MySQL中使用类似字段约束取值,有两种方式:1.枚举enum,2.创建触发器 MySQL关于check约束无效的解决办法 下面正式记录一下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,246
精华内容 1,698
关键字:

check约束