Oracle数据库开发笔记 lesson5

触发器

为什么要使用触发器

只要一变动表结构就要记录所有操作到一个审计表中

不需要显式调用来执行,而是修改表结构的操作来启动运行

Oracle 事件 

INSERT、UPDATE 及DELETE 操作或对视图进行类似的操作

执行DDL操作

数据库的启动与关闭

触发器由三部分组成:

触发器语句(事件

定义激活触发器的 DML 事件和 DDL 事件

触发器限制

执行触发器的条件,该条件必须为真才能激活触发器

触发器操作(主体)

包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行

DML 触发器

--复制表结构

 -- 创建审计表(记录emp中删除掉的数据)

  create table del_emp

   as

 select * from emp where 1=2;

-- 创建触发器(trigger)

create  or replace  trigger del_emp_trigger

before  delete on emp -- 触发事件

for  each  row  --  触发类型(行级触发器)

when  (old.dno <>50)-- 触发器的条件限制

begin

  -- 触发器的主体操作(触发器执行后做什么)

   -- 将emp表中删除掉的数据备份在审计表中(del_emp)

  insert into del_emp

   values(:old.empno,:old.ename,:old.job,:old.salary,:old.bonus,:old.hiredate,:old.sex,:old.age,:old.dno);

end;


序列(Sequence)

  -- 为了实现唯一标识的 自增的

  --  一般用于主键自增的  auto_increment


创建序列

create sequence my_seq start with 1 increment 2


create table test_sq(id number primary key, name varchar2(20));

insert into test_seq values(my_seq.nextval,'ccc'); //主键间隔2增加,插下一个值

select * from test_seq;

delete from test_seq;


select my_seq.nextval from dual;

  --  如果没有写increment默认是自增1   

  -- 没有写start with 从1开始


视图(view):有名字的结果集

  -- 本质就是一条select语句 依赖表  虚表   

作用:  

-- 控制某些列的访问

  -- 提升性能 

  -- 简化查询  把经常查询的数据放在view里  

注:表被drop了  视图就没有意义(非法了)了. 

 

-- 创建视图

   create view  my_view 

   as

    select empno,ename,job,age,sex,hiredate,dno from emp;


 create view my_2_view

    as     

 select dno ,avg(salary) from emp where dno= 10;


  --简单视图(单表) 

 create view my_2_view

    as     

 select avg(salary)avg_sal from emp where dno=10;  


--  复杂视图(多表)

create view my_3_view

 as

select d.dname name,count(e.empno) count

  from emp e,dept d where 

   e.dno=d.dno group by d.dname;


select * from my_3_view ;


-- 删除表 drop  view 视图名;


索引:index

  -- 提升查询性能的(降低查询的次数)

  -- 索引不是万能的  

  

  --  索引的分类: 列  表达式  函数


  --  位图索引(位图机制)

  --  唯一索引(主键列 默认加上了唯一索引)

   --  B树(二叉树)索引


  --创建索引(树索引)

  create index  my_index_2 on  emp(job);

 索引的使用原则

  •    表的基数很大  但是select的数据量很少(<15%)
  •    表的数据全部导入了  以后很少做修改操作 
  •    限制索引的数量 不是越多越好  因为表的数据更新
  •    索引也需要同时做维护.
  •    经常用于查询的列上或者表达式上 

  

为什么要使用触发器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值