东软实习之数据库(11)——约束

    ##约束

      约束: Constraint,是定义在“表对象”上的强制规则。

        在Oracle数据库中,可以为表设置约束,当为某个表定义了约束后,对该表做的所有操作都必须满足约束的要求,否则操作将失败。

      约束作用:Oracle服务器用约束来防止无效数据输入到表中,可以使用约束做下面的事:

      • 在插入、更新行或者从表中删除行的时候强制表中的数据遵循规则,对于成功的操作,约束必须被满足。
      • 表之间有依赖关系,可以防止表记录的删除。

      约束类型

        

      约束命名规则

        约束也是数据库对象,必须按照命名规则命名,如果你不命名约束,Oracle服务器将用SYS_Cn格式产生一个名字,这里n是一个唯一的整数。

        除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。


    #定义约束

    1. 约束通常在创建表的同时被创建;
    2. 在表被创建后,如果有需求也可以临时添加约束;
    3. 约束可以被临时禁用和启用。

      

      列级约束:只能引用一个列,属于列的定义

      

      表级约束:可引用一个或多个列,属于表定义,可以定义为除NOT NULL 以外的其它约束。

      


    #NOT NULL 约束

       NOT NULL约束 :也叫非空约束,确保被约束列的所有行记录都不能为空值。

       

      NOT NULL约束只能定义在在列级上。

       

      例子里应用NOT NULL约束到emp_nn表的ename,deptno列,因为对这两个列的约束未被命名,Oracle服务器将为它创建名字。

      在指定约束时,也可以指定约束的名字:... ename VARCHAR2(20) CONSTRAINT emp_ename_nn NOT NULL...


    #UNIQUE 约束

     UNIQUE约束:也叫唯一约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,定义UNIQUE约束的列 (或列组合) 被称为唯一键。

    每个表可以有多个为UNIQUE约束。

    

    可以定义在列一级:

     

    也可以定义在表一级:

     

    UNIQUE约束允许输入空值,除非我们在相应的列上定义NOT NULL 约束。


    #PRIMARY KEY 约束

     PRIMARY KEY约束:主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,并且确保作为主键一部分的列不能包含空值;

    每个表只能创建一个主键约束。

       

      可以定义在列一级

       

      也可以定义在表一级

       


    #FOREIGN KEY 约束

      FOREIGN KEY,也叫外键约束,外键确保了相关联的两个字段的关系: 外键列的值必须在主键表参照列值的范围内,或者为空; 外键参照的是列必须是主键或者唯一键;

      主键表主键值被外键表参照时,主键表记录不允许被删除。

       

      可以定义在列一级

       

      也可以定义在表一级

       

      FOREIGN KEY: 定义在子表的列中

      REFERENCES: 引用列所在的父表

       注: ON DELETE CASCADE:当父表中的行被删除时,子表中相依赖的行同时被删除;

        ON DELETE SET NULL:当父表的行被删除时,子表中相依赖的行被转换为空值;

        无ON DELETE CASCADE或ON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除。


    #CHECK 约束

    CHECK约束,也叫检查性约束,确保某个列的所有行数据都必须满足的条件,

    如: sal NUMBER(8,2) CONSTRAINT dept_sal_min CHECK (salary > 0) 要求sal字段的所有行数据必须大于0

    表达式不允许使用:

    • 伪列,例如: CURRVAL, NEXTVAL, LEVEL及 ROWNUM;
    • 可以调用SYSDATE, UID, USER及 USERENV 函数;
    • 对其它记录其它值的查询。

    可以定义在列一级

    

    也可以定义在表一级

    



  ##添加约束

     也可以用ALTER TABLE语句为表:

    1.  添加或删除约束,但不修改它的结构;
    2. 启用或禁用约束;
    3. 用MODIFY子句添加一个NOT NULL约束;

    你可以用带ADD子句的ALTER TABLE语句为已经存在的表添加一个约束,语法为:

     

    在语法中:

    • table 是表的名字
    • constraint 是约束的名字
    • type 是约束的类型
    • column 是受约束影响的列的名字

     添加FOREIGN KEY约束

     

    

    添加 NOT NULL 约束

    

    注:只有在表是空的或者每个行的该列都有非空值的情况下,你才可以添加一个NOT NULL约束。



 

  ##删除约束

     

    在语法中:

    • table 是表的名字
    • column 是受约束影响的列的名字
    • constraint 是约束的名字
    • cascade 级联删除

     从EMPLOYEES表中删除经理约束

     

    删除DEPARTMENTS表上的PRIMARY KEY约束,并且删除相关联的在EMPLOYEES.DEPARTMENT_ID列上的FOREIGN KEY约束;

     

 


 

  ##约束启用与禁用

    约束禁用

      如果有大批量数据导入时,我们可以采用禁用约束的方法,主要的好处,首先效率高,另外有主外键约束的表之间导入时,不用考虑导入的先后顺序。

      禁用约束语法:

      

      启用约束语法:

       


  #相关数据字典

    相关数据字典 和约束相关的数据字典有: USER_CONSTRAINTS:查看表上所有的约束。USER_CONS_COLUMNS:查看与约束相关的列名,该视图对于那些由系统指定名字的约束特别有用。

    在约束类型中,C代表CHECK,P代表PRIMARY KEY,R代表FOREIGN KEY, U代表UNIQUE,NOT NULL约束实际上是一个CHECK约束。

     



 

  ##本章重点总结

  1.  约束作用;
  2. 五种约束类型及含义:
  3. 约束的定义及追加。

 

posted @ 2018-07-20 09:31  HIT王新宇  阅读(384)  评论(0编辑  收藏  举报