zoukankan      html  css  js  c++  java
  • 数据库完整性 ch.5

    数据库的完整性 是指 数据的正确性(correctness) 和 相容性 (compat-ability)

    5.1 实体完整性

    定义##

    对单属性码的说明有两种方法,一种是定义为表约束条件,一种是定义为列级约束条件

    多属性吗只能定义成表级约束条件

    实体完整性检查和违约处理##

    检查主码是否唯1 , 检查主码的各个属性是否非为空。

    一般的数据库都会在主码上建一个索引

    5.2 参照完整性

    5.2.1 参照完整性检查 和 违约处理##

    如果要修改 参照表违约了 直接拒绝
    如果修改被参照表违约 那么根据用户的设置进行处理

    5.3 用户定义的完整性#

    属性上的约束条件

    非空
    唯一
    检查列值是否满足一个条件 check 语句

    不满足就拒绝

    元组上的约束条件##

    check 语句可以设置针对元组的约束条件

    5.4 完整性约束命名字句#

    1完整性约束命名字句名

    constraint <完整性约束名> < 完整性约束条件>

    完整新约束条件包括 unique not null primary key foreign key check 等

    方便进行完整性的修改 删除 添加等

    修改:
    alter table
    drop constraint C4;

    alter table Student drop contraint C4;
    alter tabele student
    add constraint C1 check(Son between 2313 and 23434 )
    先删除再添加新的约束

    5.5 域的完整性限制#

    建立一个域 并且声明取值范围

    create domin GrenderDomin char(2) check(value in ( 'asas' ,'sdsd') ;

    Ssex 的说明就可以简写为
    Ssex GerndeDomin

    create domin GenderDomin char(2)
    constraint GD check(value in ("nan","nv"))

    alter domin GenderDomin drop constraint GD ;

    alter domin GenderDomin add constraint GDD check(value in (1,0))

    5.6 断言

    可以使用断言机制, 使得任何操作违反了断言都会被拒绝执行
    create assertion <断言名> <check 字句>

    check 字句与 where 语句类似

    create asssertion asse_sc_cnum2
    check (60>all(select * from *** where **))

    5.7 触发器#

    触发器又叫做
    事件条件动作规则 event - conditon -action
    当特定的事件发生的时候 , 对 规则的条件进行检查

    触发器的格式是
    create trigger <触发器名>
    {before | after } <触发事件> on < 表名>
    reference new|old row as <变量>
    for each {row |statement }
    [when <触发条件>] <出发动作提>

    1 只有表的拥有着可以创建触发器,并且一个表上只有一定数量的触发器

    2 触发器名必须是唯一的,在统一模式下

    3 触发器必须定义在基本表上(视图是不被允许的

    4触发事件可以是 insert update delete delete 也可以是这几个事件的组合 比如 insert or update 还可以是 update of (《触发列》,...) 指明修改那些列的时候触发

    5触发器类型 : 可以分为 行级触发器fir each row 语句级触发器 for each statement
    一个一次修改1000 行的操作 , 语句级触发器执行1 次, 行级触发器执行1000次
    6 触发条件:触发条件为真的时候才会执行触发器的内容

    7 触发动作体
    可以是 匿名的PL/sql 过程快
    也可以是调用存储过程

    如果是行级触发器,那么可以使用 new old 引用update insert 事件之后的新址和 updaye delete 中的旧值
    如果是语句级触发器就不行

    crate trigger SC_U after update
    reference
    newrow as newtuple
    oldrow as oldtuple
    for each row
    when(newtupel.grde>oldtuple.grade*1.1)
    insert into ***
    values("sdasd,"'sda)

    语句级触发器又 newtable 和 oldtable 可以引用

    5.7.2 激活触发器##

    执行触发器的时候遵循以下顺序

    执行before 触发器
    执行激活触发器的sql 语句
    执行after 触发器

    多个before after 触发器 谁先创建谁执行。

    5.7.3 删除触发器##

    drop trigger <触发器名> on <表名>

  • 相关阅读:
    自动称重系统-3
    自动称重系统-2
    自动称重系统-1
    Qt-序列号生成器
    征战 OSG-序及目录
    Qt-QML-安卓编译问题
    OSG-OSG中的observer_ptr指针
    HZNU Training 22 for Zhejiang Provincial Competition 2020
    树上乱搞
    HZNU Training 21 for Zhejiang Provincial Competition 2020
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9204708.html
Copyright © 2011-2022 走看看