数据完整性和约束条件

发布时间 2023-07-12 15:01:12作者: WeChat2834

数据完整性和约束条件

表的数据有一定取值范围和联系,多表之间的数据有时也有一定的参照关系,在创建表和修改表时可以通过定义约束条件来保证数据的完整和一致性,在对数据进行插入,删除和修改时要对这些规则进行验证,从而起到约束作用。

  • 完整性 包括数据完整性和参照完整性,数据完整性定义表数据的约束,参照完整性定义数据之间的约束条件。数据完整性由主键(primary key),非空(not null),唯一(unique)和检查(check)约束条件定义,参照完整性由外键(foreign key )约束条件定义。

    1. 主键约束语法:[constraint 约束名] primary key (列1,列2,....) ----表级用法

    2. 非空(not null): 非空的约束,指定某列不能为空,他只能在列级定义,默认情况下oracle允许列的内容为空值

    3. 唯一(unique):唯一的约束条件要求表的一列或多列的组合内容必须唯一,可在列级或者表级定义。但如果多列唯一必须 在表级定义

    4. 检查(check): 检查约束是用来定义表的一列或多列的一个约束条件,使表的每一列的内容必须满足该条件(列为空的除外),在check条件中,可以调用sysdate,user等系统函数,一个列上可以定义多个check约束条件,一个check约束可以包含一列或多列。如果check约束的包含多列,则必须使用表级定义。

      --检查约束的语法
      [constraint 约束名] check(约束条件)  --列级,约束条件只包含本列
      [constraint 约束名] check(约束条件)  --表级,约束条件包含多列
    5. 外键(foreign key ):指定表的一列或多列的组合作为外键,外键参照指定的主键或唯一键。外键的值可以为null,如果不为null,则必须指定主键或唯一键之一。外键通常用来约束两个表间的数据关系,这两个表含有主键或唯一键的称为主表,定义外键的那张表称为子表,如果外键只包含一列,则可以在列级定义;如果包含多列,则必须在表级定义。

      • ---第一种语法,如果子记录在,则不允许删除主记录

      语法
      [constraint 约束名] foreign key(列1,列2,....) references 表名(列1,列2,...)
      • ---第二种语法,如果子记录存在,删除主表记录时,级联删除子表记录

      [constraint 约束名] foreign key (列1,列2...) references 表名(列1,列2...)
      on delete cascade;
      • ---第三种语法,如果子记录存在,则删除主记录时,将子记录置空

      [constraint 约束名] foreign key (列1,列2...) references 表名(列1,列2...) 
      on delete set null

      以上的五种语法种,constraint 关键字用来第一约束名,如果省略,则系统自动生成以SYS_开头的唯一约束名。约束名的作用就是当发生违法约束条件操作时,系统会显示违反的约束条件名称,这样用户就可以找到错误原因。


    主键   非空   唯一 检查
    ---列级定义约束
    create table emp1
    ( id varchar2(20) primary key not nul unique,
    name varchar2(20) not null,
    idcard varchar2(20) uniqiue,
    eml   varchar2(50) check( eml like '%a%'),
    sex varchar2(4) check (sex='男' or se='女'),
    denptid varchar2(20) constrain fk_deptid references deptno2(id) on delete set null
    )
    ---表级定义约束
    create table deptno2(
    id varchar2(20) not null,
    name varchar2(20) constraint nn_null not null, ---为非空约束定义别名 nn_null
    constranit pk_id primary key (id)
    )

     

查看约束条件

数据字典USER_CONSTRAINTS中包含了当前模式下用户的约束条件信息,其中,CONSTRAINT_TYPE显示约束类型为:

  • P 主键约束

  • C check约束

  • R foregin key 约束

  • U unique 唯一约束

其他相关信息可以用desc查询USER_CONSTRAINTS表结构