Oracle对象(视图&&索引)(其二)

一、视图view

概念:提供一个查询的窗口,所有数据来自原表

  • –查询语句创建表
create table emp2 as select * from emp;
  • –创建视图[必须有dba权限]
create view v_emp as select ename,job from emp;

在这里插入图片描述

  • –查询视图
select * from v_emp;

在这里插入图片描述

  • –修改视图[不推荐]
update v_emp set job='CLERK' where ename='ALLEN';
commit;

修改了原表的数据,因为所有数据来自原表

  • –创建只读视图(无法修改视图)

create view v_emp2 as select ename,job from emp with read only;

作用:
1、屏蔽一些铭感字段
2、保证总部和分部数据及时统一(总部看表,发布看试图)

视图的示例:
1.创建接口原理这门课程的成绩视图:学号、姓名、课程名称、成绩

create or replace view V_scjk as select student.sno,sname,cname,grade
  from student,course,score
  where student.sno=score.sno and score.cno=course.cno and cname='接口原理'

2.创建所有女生的基本情况视图
–添加了约束

create or replace view v_stf as select * from student where ssex='女' 
with check option 

–查询
select * from v_stf
–录入数据
–不能录入数据

insert into v_stf values('5131','啊啊','男',20,'01')    

在这里插入图片描述

insert into v_stf values('5132','啊啊啊','女',20,'01')

在这里插入图片描述

对于with check option 深入理解
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。

理解:通过视图进行的修改,必须也能通过该视图看到修改后的结果。

小结:首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。

  1. 对于update,有with check option,要保证update后,数据要被视图查询出来
  2. 对于delete,有无with check option都一样
  3. 对于insert,有with check option,要保证insert后,数据要被视图查询出来
  4. 对于没有where 子句的视图,使用with check option是多余的

二、索引

概念:在表的列上构建一个二叉树
可以大幅度提高查询效率,但是会影响增、删、改的效率
1、单列索引
单列索引触发规则:索引列中的原始值

  • –创建单列索引
create index idx_ename on emp(ename);

单行函数、模糊查询:都会影响索引的触发

select * from emp where ename='scott';

2、复合索引
复合索引第一列为优先检索列
如果要触发复合索引,必须包含优先索引列中的原始值

  • –创建复合索引
create index idx_enamejob on emp(ename,job);
  • –触发复合索引
select * from emp where ename='scott' and 'job'='xx';
  • –不触发索引
select * from emp where ename='scott' or 'job'='xx';
  • –触发单列索引
  select * from emp where ename='scott';
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值