数据库中触发器和索引的使用

本文介绍了数据库中的触发器,强调了其在数据一致性和完整性中的作用。触发器分为DML触发器、替代触发器和系统触发器,其中DML触发器在数据插入、更新或删除时自动执行。同时,文章提到了索引的创建和应用,适合于经常搜索、作为主键、链接、排序的列,但不适合于查询少、数据值单一、LOB类型或修改频繁的列。在使用索引时,应避免不等操作符、null判断、函数和不匹配数据类型的比较。
摘要由CSDN通过智能技术生成

触发器

 什么是触发器?

   触发器是一种过程,与表关系密切,用于保护表中的数据。当一个表被修改(insert、update或delete)时,触发器字动执行。触发器课实现多个表之间数据的一致性和完整性。

 触发器的类型有3种:

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

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

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

创建DML触发器:

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

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

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

触发器的语法:

 

触发器的基本使用应用实例:

-- 当有员工的工资发生变化时,触发事件修改该员工对应的部门工资数据
create or replace trigger dept_sal_trigger
--触发的时机
after 
--触发的事件
update or insert or delete on emp1
--把员工对应的部门工资进行修改
declare
  cursor total_sal is select sum(sal) total_sal,deptno from emp1 group by deptno;
  dept_s dept_sal%rowtype;
begin
  -- delete from dept_sal;
  for dept_s in total_sal loop
    update dept_sal set total_sal=dept_s.total_sal where deptno=dept_s.deptno;
    -- insert into dept_sal values(dept_s.deptno,dept_s.total_sal);
  end loop;
  -- 不要添加commit;
EXCEPTION
  when OTHERS THEN rollback;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值