视图View

视图view

        是用一个查询定义的一个或者多个表(或其它视图)中数据的一种定制表示,即是一个存储的查询或是一个虚表,与表不同,一个视图不分配任何的存储空间,视图不真正的包含数据。

        视图的特点:

  • 通过限制对表的行预订集合的存取,为表提供附加的安全性
  • 隐藏数据的复杂
  • 为用户简化命令
  • 为基本表的数据提供另一种观点
  • 可用于保存复杂查询

     

SQL> create or replace view myview as select empno,ename,deptno from scott.emp where sal<2000;  创建视图

SQL> select * from myview;  查看视图中的数据

     EMPNO ENAME                    DEPTNO
---------- -------------------- ----------
      7369 SMITH                        20
      7499 ALLEN                        30
      7521 WARD                         30
      7654 MARTIN                       30
      7844 TURNER                       30
      7876 ADAMS                        20
      7900 JAMES                        30
      7934 MILLER                       10

SQL> insert into myview values(7911,'KITTY',10);

SQL> update myview set ename='KIT' where empno=7911; 由于在创建视图时有where条件约束,而插入的数据不包含sal导致数据能插入基表,却不能更新视图。


SQL> desc myview;  查询视图的结构

SQL>select object_name from dba_objects where object_type='VIEW';

SQL>select view_name from dba_views;   

查询系统中的所有视图

SQL> select object_name,created from dba_objects where object_name='MYVIEW';查询视图建立的时间

SQL> select text from dba_views where view_name='DBA_TABLES';查看视图建立脚本

SQL> rename myview to abcde;更改视图名

SQL> drop view abcde;删除视图



物化视图(Materialized View)

        物化视图中的数据来自基表某个时刻(物化视图创建时刻或成刷新时刻),故可认为是某表某个时刻的快照。也可看成一个定时运行的刷新任务加上一个一个存储刷新结果的表,物化视图实质上就是表(也就是对应段),只不过会定时刷新。物化视图和视图类似,反应的是某个查询的结果,但是和视图仅保存SQL定义不同,物化视图本省会存储数据,因此时物化了的视图。在9i以前称为快照SNAPSHOT,从9i之后改名为物化视图。

        物化视图主要用于预先计算并保存表连接或集聚等耗时较多的结果,则在执行查询时可避免进行这些耗时的操作,从而快速得到结果,物化视图时一个包含查询结果的数据库对象。

SQL> create table stu(id char (10) primary key,name char(20));

SQL> create materialized view mv1_stu as select * from stu;

SQL> select * from mv1_stu;

SQL> select * from dba_views where view_name='MV1_STU';

SQL> select segment_name,bytes,blocks from dba_segments where segment_name='MV1_STU';

>建立on deman物化视图

         仅在该物化视图"需要"被刷新,即更新物化视图,以保证和基表数据的一致性,物化视图默认为on demand;

SQL> select refresh_mode,refresh_method from dba_mviews where mview_name='MV1_STU';

REFRESH_MODE REFRESH_METHOD
------------ ----------------
DEMAND       FORCE

 

SQL> insert into stu values('111','aaaaaaaa');

SQL> commit;

SQL> select * from stu;

SQL> select * from mv1_stu;

SQL> exec dbms_mview.refresh('mv1_stu'); 手动刷新

SQL> select * from mv1_stu;

SQL> select refresh_mode,refresh_method from dba_mviews where mview_name='MV1_STU';


refresh_mothod刷新方式:

>complete完全刷新:所有数据全部重新刷新一次。

>fast增量刷新:只刷新上次刷新后更改的数据,需要物化视图日志的支持。

>force自动刷新:系统根据情况自动采取增量或完全刷新方式,建立物化视图时默认。

>never从不刷新:不刷新数据。(备份)


SQL> create materialized view mv2_stu refresh force start with sysdate next sysdate+1/1440 as select * from stu;

SQL> select job,log_user,last_date,last_sec,next_date,next_sec,interval,what from user_jobs;

SQL> insert into stu values('222','bbbbbbb');

SQL> commit;


SQL> select * from mv1_stu;

SQL> select * from mv2_stu;

SQL> select refresh_mode,refresh_method,last_refresh_type from dba_mviews where mview_name='MV2_STU';



>建立on commit物化视图

          一旦基表进行commit即事物提交,则立刻跟新物化视图,使得数据和基表一致

SQL> grant create materialized view to kitty; 给kitty用户建立物化视图的权限

SQL> connect kitty/123456   sys用户下物化视图不支持on commit 刷新

SQL> create table stu(id char(10) primary key,name char(20));

SQL> create materialized view log on stu;

SQL> create materialized view mv3_stu refresh fast on commit as select * from stu;

SQL> select refresh_mode,refresh_method from dba_mviews where mview_name='MV3_STU';切换成sys用户

 

SQL> insert into stu values('333','ccccccc');

SQL> select * from mv3_stu;

SQL> commit;

SQL> select * from mv3_stu;

SQL> select refresh_mode,refresh_method from dba_mviews where mview_name='MV3_STU';切换成sys用户

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27634619/viewspace-745812/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27634619/viewspace-745812/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值