zoukankan      html  css  js  c++  java
  • 约束(主键、非空、唯一性、外键、检查约束)

    一、五种约束

    如果DML操作所涉及数据违反了已定义的约束,则数据库系统将拒绝执行这样的操作。

    Oracle数据库中,约束具体包括非空(NOT NULL)约束、唯一键(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束和检查(CHECK)约束五种。

    和数据表类似,约束也属于数据库对象,可以在建表的同时创建其相关约束,也可以在建表后单独添加;可以由用户命名,也可以由系统按照默认格式自动对约束进行命名;按照约束的定义位置,又可以分为表级约束和字段级约束两种。

    建表的同时创建约束的的语法格式为:

    其中,column_constraint为字段级约束,字段级约束在字段定义时一并给出,也只能约束其所属的单个字段;table_constraints为表级约束,与表中的字段并列定义,可以约束单个或多个字段。

    1、非空约束(只能在字段级定义)

    例子:

    查询数据字典视图user_constraints可得到其具体名称,SQL语句如下:

    2、唯一性约束(列中最多有一个空值

    Oracle会自动为唯一性约束的字段创建相应的唯一性索引。唯一性约束既可以在字段级定义、也可以在表级定义。

    如果要在两个或两个以上字段上定义联合唯一键(字段组合不允许出现空值),就只能定义为表级约束了,例如:

    3、主键约束(非空且唯一)

    只允许一个主键,主键可以是单个字段或多字段的组合(联合主键),Oracle会自动为主键字段创建对应的唯一性索引。主键约束既可以在字段级定义、也可以在表级定义。

    区别:主键是唯一的。

    联合主键只能定义为表级约束:

    4、外键约束

    表级、字段级均可。

    外键约束的特征:

    (1)子表外键字段的值必须在主表被参照字段值得范围内,或者为NULL;

    (2)外键参照的必须是主表的主键或唯一键(??);

    (3)主表主键/唯一键被子表参照时,主表相应记录不允许被删除。

    使用外键约束的相关原则:

    (1)创建数据表时,先创建主表,后创建子表;删除表的顺序相反;

    (2)添加数据时,先向主表中添加/插入记录,后向子表添加记录;删除数据操作顺序相反;

    (3)修改数据(UPDATE)的情况要复杂一些,通常使用触发器实现。

    外键约束可以和主键约束同时使用:

    外键约束也可能构建于同一个表内部的两个字段之间:

    5、检查约束

    表级、字段级均可。

    检查约束的条件表达式中不允许出现如下内容:
    - currval, nextval, level, rownum等伪劣
    - sysdate, uid, user, userenv等函数
    - 对其它字段值的引用

    其中, uid, user, userenv函数分别用于获取当前数据库用户ID,用户名及客户端计算机信息,如:

    二、约束管理

    1、查看约束

    如要查看当前用户的所有约束,可查询用户字典视图user_constrains:

    其返回结果中的"CONSTRAINT_TYPE"字段以缩写的方式标明约束条件的具体类型:"P"代表主键约束、 代表外键约束、"U"代表唯一键约束,检查和非空约束均使用"C"标明。

    如果想知道约束建立在哪个字段上,则需要查询用户字典视图user_cons_columns:

    2、添加约束(添加非空约束格式特别)

    建表后添加非空约束的格式有些特别——必须使用MODIFY子句添加,实际上是修改了整个字段的定义(也可以同时修改字段类型、缺省值等),例如:

    3、删除约束

    其中,CASCADE用于指定删除当前约束的级联约束。

    删除主键约束还有另外一种方式,其语法格式为:

    删除约束时,如果还存在与该约束相关联的其他约束(如外键/关联)称为级联约束,则删除操作会失败,此时可使用CASCADE子句将其他关联约束一并删除。如:

    删除表中字段时,如果该字段处于多字段联合约束条件(联合主键、联合唯一键、存在参照当前字段的外键)中,则删除会失败,此时可使用CASCADE CONSTRAINT子句将与该字段相关的约束一并删除。例如:

    4、禁用约束

    在ALTER TABLE语句中,还可以使用DISABLE CONSTRAINT子句禁用已有约束,即关闭数据校验功能,还可以使用CASCADE选项将相关联的约束一并禁用。其语法格式如下:

    相应地,可以使用ENABLE CONSTRAINT子句启用先前被禁用的约束,例如:

    和关闭约束操作的情形有所不同,此时无法再使用CASCADE选项一并启用相关联的其它约束。

  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3730825.html
Copyright © 2011-2022 走看看