欢迎访问mehome的博客

Tomorrow is another day.
Fork me on GitHub

数据库——完整性

一、

  1. 数据库的完整性是指数据的正确性相容性
  2. 数据库完整性是为了防止数据库中存在不符合语义的数据,也就是为了防止数据库中存在不正确的数据。
    • 数据库安全性:是保护数据库防止恶意的破坏和非法的存取。
    • 完整性和安全性区别
      • 完整性:检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库;
      • 完全:控制的防范对象是非法用户和非法操作,防止它们对数据库非法存取。

二、

  为了维护数据库完整性,DBMS应该具有的功能:①提供定义完整性约束条件的机制;②提供完整性检查的方法;③违约处理

  1.实体完整性

    1. 实体完整性定义:
      • 关系模型的实体完整性:在CREATE TABLE中用PRIMARY KEY定义(即关系模型用主键/主码来实现实体完整性)。
      • 对单属性构成的码有两种说明方法:一种是定义为列级约束条件;另一种是定义为表级约束条件。
      • 对多个属性构成的码只有一种说明方法:定义为表级约束条件;
    2. 实体完整性检查和违约处理:
      • 当对基本表插入一条记录或者对主码列进行更新操作时,RDBMS会自动检测下面两项
        • 一、检查主码值是否唯一,如果不唯一则拒绝插入或删除;
        • 二、检查主码的各个属性是否为空,只要有一个为空就拒绝插入或删除(此时主码为多个属性列的合集)

  2.参照完整性

    1.定义:

    • 关系模型参照完整性李荣外码来实现参照完整性条件;外键:在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码;

    2.参照完整性检查和违约处理:

    • 拒绝(NO ACTION)执行
    • 级连(CASCADE)操作
    • 设置为空值
可能破坏参照完整性的情况及违约处理
被参照表 参照表 违约处理
可能破坏参照完整性 插入元组 拒绝
可能破坏参照完整性 修改外码值 拒绝
删除元组 可能破坏参照完整性 拒绝/级连删除/设置为空值
修改主码值 可能破坏参照完整性 拒绝/级连删除/设置为空值

  3.用户定义完整性

  • 用户定义的完整性就是:针对某一具体应用的数据必须满足的语义要求;

    1.属性上的约束条件定义:

    • 即在CREATE TABLE中定义属性相同时可以根据应用的要求,定义属性上的约束条件,即属性值限制包括:列值非空;列值唯一;检查列值是否满足一个布尔表达式。

    2.属性上的约束条件检查和违约处理:不满足条件则操作被拒绝执行。

    3.元组的约束条件定义:

    • 在CREATE TABLE语句中可以用CHECK短语定义元组的约束条件。
    • 元组级的限制可以设置不同属性之间的取值的相互约束条件。

    4.元组的约束条件检查和违约处理:不满足条件则拒绝执行。

三、

  触发器:不是SQL92/SQL99核心SQL规范的内容;触发器类似于约束,但是比约束更加灵活,可以实施比FOREIGN KEY约束、CHECK约束更复杂的检查和操作;

    • 触发器创建:CREATE TRIGGER <触发器名字> {BEFORE | AFTER} <触发事件> ON <表明> FOR EACH {ROW | STATEMENT} [WHEN <触发条件>] <触发动作体>
    • 激活触发器:同一个表触发器激活时遵循的执行顺序:
        • 1、执行该表上的BEFORE触发器;
        • 2、激活触发器的SQL语句;
        • 3、执行该表上的AFTER触发器。
    • 删除触发器:DROP TRIGGER <触发器名> ON <表名>
    • 只能由具有相应权限的用户删除触发器。

 

posted @ 2017-04-27 17:23  mehome  阅读(1384)  评论(0)    收藏  举报