第六章视图分析
- 格式:docx
- 大小:37.93 KB
- 文档页数:7
第六章视图1.概述✓视图(View)是从一个或多个表(其他视图)中导出的表,其结构和数据是建立在对表的查询基础之上的。
所以视图不是真实存在的基础表,而是一张虚表。
视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
✓视图一经定义便存储在数据库中,与其相对应的数据并没有像表一样在数据库中另外存储一份,通过视图看到的数据只是存放在基表中的数据。
对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)和删除。
✓当对视图中的数据进行修改时,相应的基表的数据也要发生变化,同时,如果基表的数据发生变化,则这种变化也可以自动地反映到视图中2.视图的特点1.视点集中,减少对象大小视图让用户能够着重于他们所需要的特定数据或所负责的特定要求,如用户可以选择特定行或特定列。
2.从异构源组织数据可以在连接两个或多个表的复杂查询的基础上创建视图,这样可以将单个表显示给用户。
3.隐藏数据的复杂性,简化操作视图向用户隐藏了数据库设计的复杂性,这样如果开发者改变数据库设计,不会影响到用户与数据库交互。
另外,用户可将经常使用的连接查询、嵌套查询或联合查询定义为视图。
4.简化用户权限的管理可以将视图的权限授予用户,而不必将基表中某些列的权限授予用户,这样就简化了用户权限的定义。
3.视图的四种类型✓关系视图:关系视图(relational view)基本上就是经过存储的查询,可以将它的输出看作是一个表。
它就是基于关系数据的存储对象。
✓内嵌视图:又称为嵌套查询,是嵌入到父查询中的查询,能够在任何可以使用表名称的地方使用。
✓对象视图:为了迎合数据库中对象类型而将关系表投射到特定数据类型的虚拟对象表中,视图的每行都是带有属性、方法和唯一标识(OID)的对象实例。
✓物化视图:就是在数据库中查询结果存储在视图中,并支持查询重写、刷新、提交等特性的视图4.视图的创建及管理a)关系视图语法:用户赋予create view的权限查看视图可以通过User_views,All_views,Dba_views来查询视图信息例如:1.创建普通关系视图【可对视图执行DML操作】2.创建只读视图3.创建检查视图4.创建连接视图5.创建复杂视图特点:复杂视图是指包含函数、表达式或分组数据的视图,主要目的是为了简化查询create or replace view view_emp as select count(*) 人数,avg(sal+nvl(comm,0)) 平均工资,deptno 部门编号 from emp groupby deptno;6.创建强制视图特点:正常情况下,如果基表不存在,创建视图就会失败。
但是可以使用FORCE选项强制创建视图(前提是创建视图的语句没有语法错误),但此时该视图处于失效状态,调用会出错,直到这个基表已经存在create or replace FORCE view view_test as select * from myemp;视图上的DML语句有如下限制:●只能修改一个底层的基表●如果修改违反了基表的约束条件,则无法更新视图●如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或GROUP BY 子句,则将无法更新视图●如果视图包含伪列或表达式,则将无法更新视图b)内嵌视图概述内嵌视图就是嵌入到父查询中的查询,能够在任何可以使用表名称的地方使用。
内嵌视图又称为嵌套查询嵌视图可以出现在SELECT语句的FROM子句中,以及INSERT INTO、UPDATE甚至是DELETE FROM语句中。
内嵌视图是临时的,它只存在于父查询的运行期间案例:select * from (select e.*,rownum rn from emp e) tab where rn>=5 and rn<=10;其中: select e.*,rownum rn from emp e就是一个内嵌视图,临时有效c)对象视图d)物化视图概述:物化视图简单理解就是一张特殊的物理表,预先计算并保存表连接或统计中需要耗时较多的操作的结果。
物化视图也称为”快照”物化视图可以定时更新视图中的数据,对于大量数据统计查询后得出的小量结果集这种情况比较适合。
物化视图可以查询表,视图和其它的物化视图我们可以通过user_segments查看用户创建对象所在资源情况Select * from user_segments物化视图类型1.包含聚集的物化视图2.只包含连接的物化视图3.嵌套物化视图无论哪种视图,都需要设置物化视图的创建方式、查询重写、刷新方式等几个方面的功能选项。
创建方式(Build Methods)–BUILD IMMEDIATE:是在创建物化视图的时候就生成数据。
默认为BUILD IMMEDIATE–BUILD DEFERRED:是在创建时不生成数据,以后根据需要在生成数据查询重写(Query Rewrite)–查询重写(ENABLE QUERY REWRITE):指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。
不查询重写(DISABLE QUERY REWRITE):指当对物化视图的基表进行查询时,Oracle会不会判断能否通过查询物化视图来得到结果,直接对基表进行查询数据而不从物化视图中读取数据。
默认为DISABLEQUERY REWRITE。
刷新(Refresh)方式【自动on commit,手动】–刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。
默认值是FORCE。
–刷新的模式有两种:ON DEMAND和ON COMMIT。
默认值是ON DEMAND创建视图日志文件如果设置刷新方法为fast,必须先构建一个基于基表的视图日志,语法如下:CREATE MATERIALIZED VIEW LOG ON<table_name>[TABLESPACE <tablespace_name>] --视图日志保存位置[WITH [PRIMARY KEY|ROWID|SEQUENCE ];--标示基表每一行[ including new values]create materialized view log on emp with rowid创建物化视图语法CREATE MATERIALIZED VIEW [mv_name][TABLESPACE [ts_name] -- 指定表空间BUILD [IMMEDIATE|DEFERRED] -- 创建时是否产生数据REFRESH [FAST|COMPLETE|FORCE] -- 快速、完全刷新[ON COMMIT|ON DEMAND START WITH (start_time) NEXT (next_time)] -- 刷新方式[WITH {PRIMARY KEY |ROWID}] --快速刷新时候唯一标示一条记录{ENABLE|DISABLED} QUERY REWRITE –是否查询重写]AS {select_statement};➢构建一个创建时产生数据,快速刷新【限制比较多】,刷新方式为on commit,快速刷新是唯一标示为rowid的案例create materialized view my_viewbuild immediaterefresh fast on commitwith rowidasselect empno,ename,sal from emp where sal>=3000;Rowid物化视图只有一个单一的主表,不能包括下面任何一项:Distinct 或者聚合函数.Group by,子查询,连接和SET操作➢构建一个创建时产生数据,默认刷新,刷新方式为on commit,刷新是唯一标示为rowid,支持重写的案例create materialized view my_viewbuild immediate refresh on commit enable query rewrite asselect deptno,count(*) amount from myemp group by deptno;注意:包含聚集,group by 不能创建快速刷新➢创建一个定时提交的物化视图➢删除物化日志文件➢删除物化视图物化视图总结:物化视图提供了可伸缩的基于主键或ROWID的视图,指定了刷新方法和自动刷新的时间。
Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。
物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新5.常用系统视图a)USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息。
1.Select * from user_users;--查看当前用户信息2.Select * from user_tables;--查看当前用户创建表信息3.Select * from user_views;--查看当前用户创建视图信息4.select * from user_tab_privs—查看当前用户表权限5.select * from user_sys_privs;--查看当前用户系统6.select * from user_role_privs;--查看当前用户角色b)ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息。
c)DBA_*:有关整个数据库中对象的信息。
这里的*可以为TABLES,INDEXES,OBJECTS,USERS等。
d)V$*:一般是动态视图,随着客户端或参数值设定的不同而不同6.。