您的位置:首页 > 数据库

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

2017-09-27 08:56 267 查看
触发器
什么是触发器

触发器的类型
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_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子句中使用函数

避免在比较时使用不匹配的数据类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 触发器 索引
相关文章推荐