一、视图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 约束。
理解:通过视图进行的修改,必须也能通过该视图看到修改后的结果。
小结:首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。
- 对于update,有with check option,要保证update后,数据要被视图查询出来
- 对于delete,有无with check option都一样
- 对于insert,有with check option,要保证insert后,数据要被视图查询出来
- 对于没有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';