精华内容
下载资源
问答
  • Oracle之检查约束的使用(四)

    万次阅读 2017-04-04 09:21:40
    1. 检查约束是什么检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。2.在创建表时设置检查约束1)基于单列的唯一性约束语法: ...

    1. 检查约束是什么

    检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。

    2.在创建表时设置检查约束

    1)列级检查约束

    语法:

    CREATE TABLE table_name ( column_name datatype CHECK(expressions)) ;
    

    CHECK 是检查关键字
    expressions 是约束的条件
    实例:
    将salary 设置检查约束,使其>0 。

     create table userinfo_c(
       id varchar2(10)  primary key ,
       username varchar2(20) ,
       salary number(5,0) check(salary>0)) ;

    执行
    先执行实例,插入语句当 salary<0 的时候报错。

    SQL> create table userinfo_c(
      2  id varchar2(10)  primary key ,
      3  username varchar2(20) ,
      4  salary number(5,0) check(salary>0)) ;
    
    表已创建。
    
    SQL> insert into userinfo_c values(1,'shao'-500) ;
    insert into userinfo_c values(1,'shao'-500)
                *
    第 1 行出现错误:
    ORA-00947: 没有足够的值
    SQL>

    2)表级级检查约束

    语法

    CONSTRAINT constraint_name CHECK(expressions) 
    

    实例

     create table userinfo_c1(
       id varchar2(10) primary key ,
       username varchar2(20),
       salary number(5,0),
       constraint  ck_salary check(salary>0) );

    3.修改表设置检查约束

    语法

    ADD CONSTRAINT constraint_name CHECK(expressions) 
    

    实例
    首先创建一个表

    create table userinfo_c2(
    id varchar2(10)  primary key, 
    username varchar2(20),
    salary number(5,0)
    ) ;

    添加检查约束。

    alter table userinfo_c2  add constraint ck_salary_new  check(salary>0) ;

    4.删除检查约束

    1)禁用(启用)检查约束

    语法

    ALTER TABLE table_name  DISABLE|ENABLE CONSTRAINT constraint_name 
    

    实例

    alter table userinfo_c1 disable constraint ck_salary ;

    运行
    1. 要查看userinfo_1 的禁用状态, 首先 desc user_constraints 看看数据字典的字段, 我们要看CONSTRAINT_NAME , CONSTRAINT_TYPE STATUS 类型。
    2. 执行 select constraint_name ,constraint_type, status from user_constraints where table_name=’USERINFO_C1’
    ;来查看。
    3. 禁用检查约束
    执行 alter table userinfo_c1 disable constraint constraint名字;

    SQL> desc user_constraints
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     OWNER                                              VARCHAR2(30)
     CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)
     CONSTRAINT_TYPE                                    VARCHAR2(1)
     TABLE_NAME                                NOT NULL VARCHAR2(30)
     SEARCH_CONDITION                                   LONG
     R_OWNER                                            VARCHAR2(30)
     R_CONSTRAINT_NAME                                  VARCHAR2(30)
     DELETE_RULE                                        VARCHAR2(9)
     STATUS                                             VARCHAR2(8)
     DEFERRABLE                                         VARCHAR2(14)
     DEFERRED                                           VARCHAR2(9)
     VALIDATED                                          VARCHAR2(13)
     GENERATED                                          VARCHAR2(14)
     BAD                                                VARCHAR2(3)
     RELY                                               VARCHAR2(4)
     LAST_CHANGE                                        DATE
     INDEX_OWNER                                        VARCHAR2(30)
     INDEX_NAME                                         VARCHAR2(30)
     INVALID                                            VARCHAR2(7)
     VIEW_RELATED                                       VARCHAR2(14)
    
    SQL> select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;
    
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    CK_SALARY                      C ENABLED
    SYS_C0010837                   P ENABLED
    
    SQL> alter table userinfo_c1 disable constraint ck_salary ;
    
    表已更改。
    
    SQL>  select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;
    
    CONSTRAINT_NAME                C STATUS
    ------------------------------ - --------
    CK_SALARY                      C DISABLED
    SYS_C0010837                   P ENABLED
    
    SQL>

    2)删除检查约束

    语法

    ALTER TABLE table_name  DROP CONSTRAINT constraint_name
    

    实例
    如上一样。

    展开全文
  • 什么是检查约束”? 这一项新功能,用于指定在插入或更新到一行之前检查值条件。如果表任何行搜索条件结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。 此功能...

    什么是“检查约束”?

    这是一项新功能,用于指定在插入或更新到一行之前检查值的条件。如果表的任何行的搜索条件的结果为 FALSE,则约束可能返回错误(但如果结果为 UNKNOWN 或 TRUE,则约束不会返回错误)。

    此功能开始在 MySQL 8.0.16 上运行,在以前的版本中,我们可以创建它,但它不起作用,这意味着支持语法,但不起作用。

    要牢记的使用规则:

    AUTO_INCREMENT 自增列不允许使用
    引用另一个表中的另一列不允许使用
    存储的函数和用户定义的函数不允许使用
    存储过程和函数参数不允许使用
    子查询不允许使用
    在外键中用于后续操作(ON UPDATE,ON DELETE)的列不允许使用
    为下一条语句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 评估此次监测。此外,还会为 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 评估此监测约束。对于这些语句,如果约束的评估结果为 FALSE,则会发生警告。插入或更新被跳过。
    看一些例子

    我创建了下表来测试此功能。如示例所示,这非常简单:

    CREATE TABLE users (
    id int not null auto_increment,
    firstname varchar(50) not null,
    lastname varchar(50) not null,
    age TINYINT unsigned not null CONSTRAINT check_1 CHECK (age > 15),
    gender ENUM(‘M’, ‘F’) not null,
    primary key (id)
    ) engine = innodb;
    在这个简单的测试中,仅当 age > 15 时,我们才能写入或更新行。

    让我们看一个示例,尝试插入 age < 15 的行:

    mysql> INSERT INTO users SET firstname = ‘Name1’, lastname = ‘LastName1’, age = 10, gender = ‘M’;
    ERROR 3819 (HY000): Check constraint ‘check_1’ is violated.
    要删除,请使用下一个示例:

    ALTER TABLE users DROP CHECK check_1;
    让我们看另一个示例,向其中添加更多逻辑。我用下一个检查表更改了表:

    ALTER TABLE users
    ADD CONSTRAINT gender_male
    CHECK (
    CASE
    WHEN gender = ‘M’
    THEN
    CASE
    WHEN age >= 21
    THEN 1
    ELSE 0
    END
    ELSE 1
    END = 1
    );

    ALTER TABLE users
    ADD CONSTRAINT gender_female
    CHECK (
    CASE
    WHEN gender = ‘F’
    THEN
    CASE
    WHEN age >= 18
    THEN 1
    ELSE 0
    END
    ELSE 1
    END = 1
    );
    我们添加了更多逻辑,现在它取决于 sex 和 age 列。当且仅当表行的指定条件评估为 TRUE 或 UNKNOWN(对于 NULL 列值)时,才满足 CHECK 监测约束,否则违反约束。

    让我们从前面的逻辑中看一个例子。

    mysql> INSERT INTO users SET firstname = ‘Name2’, lastname = ‘LastName2’, age = 10, gender = ‘F’;
    ERROR 3819 (HY000): Check constraint ‘gender_female’ is violated.

    mysql> INSERT INTO users SET firstname = ‘Name3’, lastname = ‘LastName3’, age = 10, gender = ‘M’;
    ERROR 3819 (HY000): Check constraint ‘gender_male’ is violated.
    如您在 ERROR 消息中所见,MySQL 正在显示 CHECK 约束名称。可以从应用程序源代码中使用它来调试错误并知道从哪个 CHECK 失败。

    最后,这是表结构:

    CREATE TABLE users (
    id int(11) NOT NULL AUTO_INCREMENT,
    firstname varchar(50) NOT NULL,
    lastname varchar(50) NOT NULL,
    age tinyint(3) unsigned NOT NULL,
    gender enum(‘M’,‘F’) NOT NULL,
    PRIMARY KEY (id),
    CONSTRAINT gender_female CHECK (((case when (gender = ‘F’) then (case when (age > 18) then 1 else 0 end) else 1 end) = 1)),
    CONSTRAINT gender_male CHECK (((case when (gender = ‘M’) then (case when (age > 21) then 1 else 0 end) else 1 end) = 1))
    ) ENGINE=InnoDB AUTO_INCREMENT=4;
    我们可以使用此功能在表中添加更多的逻辑,但是根据我以前作为程序员的经验,我不建议在表中添加逻辑,因为除非您无法访问应用程序代码,否则很难找到或调试错误。

    展开全文
  • 1、什么是约束? 在创建表得时候,可以给表得字段添加相应得约束,添加约束的目的为了保证表中数据的合法性、有效性、完整性。...检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mys

    1、什么是约束?

    在创建表得时候,可以给表得字段添加相应得约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

    2、常见的约束有哪些?

    非空约束(not null): 约束的字段不能为NULL

    唯一约束(unique): 约束的字段不能重复

    主键约束(primary key): 玉树的字段既不能为NULL,也不能重复(简称PK)

    外键约束(foreign key): ....(简称FK)

    检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。

    展开全文
  • 距离秋招还有6个月了,明天争取结束数据库学习,进给web学习 ! 一:什么是约束: 约束用来规范表中结构一种限制,为了保证数据可靠性和稳定性 ...⑤ check:检查约束【mysql中不支持

    距离秋招还有6个月了,明天争取结束数据库的学习,进给web的学习 !

    一:什么是约束:

    约束是用来规范表中结构的,是一种限制,为了保证数据的可靠性和稳定性

    二:常见的约束有哪些以及作用

    ① not null 非空,用于保证该字段的值不能为空
    比如姓名,学号等

    ② default 默认约束,用于保证该字段有默认值

    ③ PRIMARY KEY:主键,用于保证该字段具有唯一性,并且非空
    比如学号,员工编号

    ④ UNIQUE :唯一,用于保证字段具有唯一性,可以为空

    ⑤ check:检查约束【mysql中不支持】 用于加条件的,只有满足条件的才可以添加

    ⑥ FOREGIN KEY 外键: 用来限制两个表的关系的,用于保证该字段的值必须来自于主表,主表关联列的值意思是说在从表添加外键约束,用于引用主表中某列的值,比如学生表的专业编号,员工表的部门编号

    三:列及约束与表级约束的区别
    ① 位置不同 :列级约束是写在列的后面,标记约束时写在所有字段的最后面

    ② 支持的约束类型不同:列级约束可以支持所有的约束类型,表级约束不能支持非空和默认

    ③ 列级约束不可以起约束名,表记约束可以起约束名(主键除外,主键使用的PRIMARY KEY)

    展开全文
  • oracle 数据库的约束

    2018-09-25 21:02:59
    第一种 约束: 主键约束(PRMARY KEY ) 作用:用来识别一个行的,添加了主键约束的列,具有唯一且非空的特性,一般主键会用来设置id的,因为id一个有序且无意义的。 添加主键约束代码示例 --第一种添加方式 AL.....
  • 约束详解

    2020-09-02 20:12:34
    约束的作用就是保证表中的记录完整和有效性 三、约束种类 非空约束(not null) 唯一性约束(uniwue) 主键约束(primary key) 外键约束(foreign key) 检查约束(目前不支持mysql、oracle支持) 四、非空约束 not null...
  • 外键主要作用是:保持数据一致性、完整性。 mysql中 InnoDB表支持对外部关键字约束条件的检查 主表my_article_category 从表 my_article 外键一定是在从表中创建,从而找到与主表之间联系;从表负责维护二者...
  • MSSQL 创建约束

    千次阅读 2015-06-08 16:52:13
    1、SQL 创建约束和主键约束那么约束的作用是什么呢?正所谓无规矩不成方圆,MSSQL也建立一套约束机制,比如说再创建字段或者修改字段的时候,限制其输入格式、范围抑或是执行某种检查,如果不想自己用代码逻辑检查,...
  • 五大约束详解

    千次阅读 2020-09-04 18:57:55
    一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者...
  • 【Mysql回顾】约束

    2020-11-12 16:09:09
    一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者...
  • 05、约束(Constraint)

    2020-06-18 18:48:00
    ​ 在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的为了保证表中数据的合法性、有效性、完整性。 ​ 常见的约束: 表达式 作用 not null 非空约束,不能为NULL unique 唯一约束,不能...
  • 外键数据库一级一个完整性约束,就是数据库基础理论书中... 外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查了。
  • 一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者...
  • 一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者...
  • 约束的作用就是为了保证:表中的数据有效!! 2、约束包括哪些? 非空约束:not null 唯一性约束:unique 主键约束:primary key(简称PK) 外键约束:foreign key (简称FK) 检查约束:check (MySQL不支持,...
  • 一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加...
  • 外键的作用

    2017-03-10 11:06:03
    外键数据库一级一个完整性约束,就是数据库基础理论书... 外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查
  • 二、约束作用表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者必须注册的时候需要添加邮箱等三、约束种类非空约束(not null)唯一性约束...
  • sql 外键的作用

    万次阅读 2011-08-08 15:45:15
    外键数据库一级一个完整性约束,就是数据库基础... 外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查了。   例
  • 泛型(Generics)JDK...1.通过泛型语法定义,约束集合元素类型,进行安全检查,把错误显示在编译期 2.代码通用性更强(后面有案例) 3.泛型可以提升程序代码可读性,但它只是一个语法糖,对于JVM运行时
  • mysql 中外键的作用

    2016-09-19 12:55:50
     外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查了。   例如有两个表   A(a,b) :a为主键,b为外键(来自于B...
  • 外键数据库一级一个完整性约束,就是数据库基础... 外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查了。 
  • [转]外键的作用

    2013-08-05 20:12:49
    外键属性当然可以去掉,如果你不想再用这种约束,对编程当然不会有什么影响,但相应录入数据时候就不对录入数据进行“参照完整性”检查了。例如有两个表A(a,b) :a为主键,b为外键(来自于B.b)B(b,c,d) :b...
  • 因为Java的泛型只在编译期起作用,就是在我们写代码时,起到一个检查的作用,当代码跑起来时,其内部并没有泛型。下面一个简单的例子就可以证明这一点。 通过反射,我们可以不受约束地将一个任意类型的元素添加到一...
  • 用法不同typedef用来定义一种数据类型别名,增强程序可读性。define主要用来定义常量,以及书写复杂使用频繁宏。执行时间不同typedef编译...define不受作用约束,只要在define声明后引用都正确。对
  • 什么是约束:使用约束、键的作用来维护数据表的完整性 约束有哪些: 自增约束 非空约束 检查约束 默认约束 唯一约束 主键约束 外键约束 一般在设置列特征的时候都提前在数据库设计时需要考虑...
  • 数据库表完整性

    2020-03-19 20:11:12
    数据表的完整性 实体完整性 每个表中有一个必须要指定的字段,主要依赖...什么是约束:使用约束、键的作用来维护数据表的完整性 约束有哪些: 自增约束 非空约束 检查约束 默认约束 唯一...
  • 数据表完整性

    2020-03-17 20:03:27
    数据表的完整性 实体完整性 每个表中有一个必须要指定的字段,主要依赖...什么是约束:使用约束、键的作用来维护数据表的完整性 约束有哪些: 自增约束 非空约束 检查约束 默认约束 唯一...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 156
精华内容 62
关键字:

检查约束的作用是什么