视图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/