zoukankan      html  css  js  c++  java
  • 数据库对象——触发器、索引


    触发器

    什么是触发器?

    • 触发器是一种过程,与表关系密切,用于保护表中的数据。

    • 当一个基表被修改(INSERT、UPDATE或DELETE)时,触发器自动执行。

    • 触发器可实现多个表之间数据的一致性和完整性。

    触发器的类型

    触发器的类型有三种:DML触发器,替代触发器,系统触发器。

    DML触发器

    Oracle可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句或操作上进行触发

    替代触发器

    由于在Oracle里,不能直接对由两个以上的表简历的视图进行操作。所以给出了替代触发器。它就是Oracle 8 专门为进行视图操作的一种处理方法。

    系统触发器

    Oracle 从8i开始,提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。

    触发器的创建

    触发器创建语法

    这里写图片描述

    创建DML触发器

    • DML触发器由DML语句激发,并且由该语句的类型决定DML触发器的类型

    • 可以定义DML触发器进行insert、update、delete操作。

    • DML触发器可以在上述操作之前或之后激发,也可以在运行或语句操作上激发。

    这里写图片描述

    触发器中使用谓词

    谓词用来判断用户所执行的DML语句的类型.

    • inserting
    • updating
    • deleting

    这里写图片描述

    触发器的修改与删除

    --触发器的禁用
    alter trigger emp_sal_trigger disable;
    
    --启用触发器
    alter trigger emp_sal_trigger enable;
    
    --删除触发器
    drop trigger XXXXX;
    
    --查询当前用户的所有触发器
    select * from user_triggers;

    练习:行级触发器

    题目要求:
    –当有人的工资发生改变时,需要做记录.
    当公司多了雇员的时候,添加记录中只有新的工资
    当有人离职时,需要把该员工工资修改记录删除

    create or replace trigger emp_sal_trigger
    after update or insert or delete on emp1
    for each row  --行级触发器
    begin
      if updating
        then insert into emp_sal values(:old.empno,:new.sal,:old.sal,sysdate,emp_sal_seq.nextval);
      ELSIF inserting
        then insert into emp_sal values(:new.empno,:new.sal,0,sysdate,emp_sal_seq.nextval);
      else 
        delete from emp_sal where empno=:old.empno;
      end if;
    exception
      when others then dbms_output.put_line('添加失败!');
    end;

    练习:要求工资只能增加不能降低

    create or replace trigger keep_sal_trigger
    before update on emp1
    for each row
    begin
      if :new.sal<:old.sal
          then :new.sal:=:old.sal;
      end if;
    end;
    

    索引

    索引:

    可以建立类似目录的数据库对象,实现数据快速查询。

    索引的分类

    按照索引的存储结构分类

    B树索引

    位图索引

    反向键索引

    按照索引值是否唯一分类

    唯一索引

    非唯一索引

    按索引分类

    单列索引

    组合索引

    基于函数的索引

    索引语法

    这里写图片描述

    实例:索引练习

    这里写图片描述

    建立索引的特点

    • 经常需要搜索的列
    • 主键列
    • 经常用在连接的列
    • 经常需要根据范围搜索的列
    • 经常需要排序的列
    • 经常出现在where子句的列

    不应该建立索引的列

    • 查询中很少使用或者参考的列
    • 只有很少数据值的列
    • 定义为lob类型的列
    • 修改性能远远大于检索性能

    避免限制索引

    • 避免使用不等操作符(<>、!=)
    • 避免使用is null is not null
    • 避免在where子句中使用函数
    • 避免在比较时使用不匹配的数据类型
  • 相关阅读:
    LRU算法实现 最近最久未使用
    快速排序
    redis 常用命令
    实例:接口并发限流RateLimiter
    Hadoop伪分布式安装
    ssl免密登录(centos6)
    Linux下安装jdk-7u67-linux-x64.rpm
    Mosquitto安装和使用
    MQTT linux centOS7 部署
    CentOS更换yum源
  • 原文地址:https://www.cnblogs.com/aixing/p/13327691.html
Copyright © 2011-2022 走看看