数据库对象——触发器、索引
来源:互联网 发布: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子句中使用函数
- 避免在比较时使用不匹配的数据类型
阅读全文
0 0
- 数据库对象——触发器、索引
- 008 数据库对象—触发器—讲解
- 数据库之——索引、触发器、事务(存储引擎)
- 数据库——触发器
- 数据库——触发器
- 【数据库】5索引、视图、触发器
- 数据库—数据库索引
- 如何获取Oracle数据库中某表及索引、约束、触发器、对象权限的创
- 数据库对象——触发器——轻松走进数据库系列六
- 数据库原理——触发器
- SQLServer数据库——触发器
- Oracle数据库常见对象—索引和同义词
- Oracle数据库基础(五)--索引,触发器
- MYSQL数据库学习----索引和触发器
- 数据库索引-视图-触发器-存储过程
- MySQL数据库(主键、索引、外键、触发器...)
- 数据库中触发器和索引的使用
- 数据库对象--索引
- android 弹出对话框时显示键盘
- SQLite常用的函数
- python中一些好用的关于机器学习的技巧
- java使用assert断言时不起作用的解决办法
- 训练集,测试集,检验集的区别与交叉检验
- 数据库对象——触发器、索引
- 解析opencv中Box Filter的实现并提出进一步加速的方案(源码共享)
- 表格分页
- 朋友圈(简单实现)
- BZOJ2631:tree(LCT)
- checkbox勾选 取消勾选只能操作一次的诡异问题
- php路由实现原理
- JSTL、EL、ONGL、Struts标签的区别与使用
- bzoj 1486: [HNOI2009]最小圈