数据库对象——触发器、索引

来源:互联网 发布:ubuntu双系统安装教程 编辑:程序博客网 时间:2024/06/11 03:46

  • 触发器
    • 什么是触发器
    • 触发器的类型
      • DML触发器
      • 替代触发器
      • 系统触发器
    • 触发器的创建
      • 触发器创建语法
      • 创建DML触发器
    • 触发器中使用谓词
    • 触发器的修改与删除
    • 练习行级触发器
    • 练习要求工资只能增加不能降低
  • 索引
    • 索引的分类
      • 按照索引的存储结构分类
        • B树索引
        • 位图索引
        • 反向键索引
      • 按照索引值是否唯一分类
        • 唯一索引
        • 非唯一索引
      • 按索引分类
        • 单列索引
        • 组合索引
        • 基于函数的索引
    • 索引语法
      • 实例索引练习
    • 建立索引的特点
    • 不应该建立索引的列
    • 避免限制索引


触发器

什么是触发器?

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

  • 当一个基表被修改(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_triggerafter update or insert or delete on emp1for 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_triggerbefore update on emp1for each rowbegin  if :new.sal<:old.sal      then :new.sal:=:old.sal;  end if;end;

索引

索引:

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

索引的分类

按照索引的存储结构分类

B树索引

位图索引

反向键索引

按照索引值是否唯一分类

唯一索引

非唯一索引

按索引分类

单列索引

组合索引

基于函数的索引

索引语法

这里写图片描述

实例:索引练习

这里写图片描述

建立索引的特点

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

不应该建立索引的列

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

避免限制索引

  • 避免使用不等操作符(<>、!=)
  • 避免使用is null is not null
  • 避免在where子句中使用函数
  • 避免在比较时使用不匹配的数据类型
原创粉丝点击