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 <表名>

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9204708.html
Copyright © 2011-2022 走看看