Oracle视图的使用

1.视图的概念

    视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度来观察一个(或多个)表。视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上同样起作用。

2.视图的优点:

*   可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。

*   简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的检索却很简单。

*   一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。

*   视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访问同一个表的不同部分。

      

3.创建视图

创建视图需要CREAE VIEW系统权限,视图的创建语法如下:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW视图名[(别名1[,别名2...])]

扫描二维码关注公众号,回复: 1253317 查看本文章

AS 子查询

[WITH CHECK OPTION [CONSTRAINT 约束名]]

[WITH READ ONLY]

其中:

OR REPLACE 表示替代已经存在的视图。

FORCE表示不管基表是否存在,创建视图。

NOFORCE表示只有基表存在时,才创建视图,是默认值。

USER_VIEWS字典中包含了视图的定义。

 

4.物化视图

      物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。
     物化视图的类型ON DEMANDON COMMIT。二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。
物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

    创建物化视图时可以指定多种选项
   * 创建方式(Build Methods):包括BUILD IMMEDIATEBUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE
     *查询重写(Query Rewrite):包括ENABLE QUERY REWRITEDISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE
     *在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

     *创建自动更新的物化视图

CREATE MATERIALIZED VIEW T_TEST_MV

REFRESH FAST ON DEMAND WITH ROWID

START WITH SYSDATE NEXT SYSDATE + 30/86400

AS

SELECT * FROM t_test;

这样,T_TEST_MV会有一个job自动更新,时间间隔为30秒。

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

 物化视图和普通视图的区别

*普通视图不存放数据,物化视图存放数据

*在使用视图进行查询时,是通过View中的SQL查询原表的数据,不能提高查询性能。在通过物化视图进行查询时,直接读取物化视图的数据,提高查询性能。

对普通视图应用更新、删除操作会影响原表的数据。只读物化视图不能进行DML操作。可更新物化视图可进行DML操作,并且在刷新时操作会被推送回原表。可写物化视图可进行DML操作,但刷新后所有修改操作在刷新后全部丢失

猜你喜欢

转载自xty88645.iteye.com/blog/1940175
今日推荐