Oracle视图的使用

系统 2096 0

1.视图的概念

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

2.视图的优点:

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

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

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

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

       

3.创建视图

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

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

AS   子查询

[WITH CHECK OPTION [CONSTRAINT  约束名 ]]

[WITH READ ONLY]

其中:

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

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

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

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

Oracle视图的使用

 

4. 物化视图

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

 

      创建物化视图时可以指定多种选项
   *   创建方式( Build Methods ):包括 BUILD IMMEDIATE BUILD DEFERRED 两种。 BUILD IMMEDIATE 是在创建物化视图的时候就生成数据,而 BUILD DEFERRED 则在创建时不生成数据,以后根据需要在生成数据。默认为 BUILD IMMEDIATE
     * 查询重写 (Query Rewrite) :包括 ENABLE QUERY REWRITE DISABLE 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 操作,但刷新后所有修改操作在刷新后全部丢失

Oracle视图的使用


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论