视图与物化视图

一、视图

创建视图语法结构:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
    [(alias[, alias]...)]
 
AS subquery
     [WITH CHECK OPTION [CONSTRAINT constraint]]
     [WITH READ ONLY]

语法解析:

  • OR REPLACE    :若所创建的试图已经存在,则替换旧视图;
  • FORCE:不管基表是否存在ORACLE都会自动创建该视图(即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用);
  • NOFORCE  :如果基表不存在,无法创建视图,该项是默认选项(只有基表都存在ORACLE才会创建该视图)。
  • alias:为视图产生的列定义的别名;
  • subquery  :一条完整的SELECT语句,可以在该语句中定义别名;
  • WITH CHECK OPTION  :插入或修改的数据行必须满足视图定义的约束;
  • WITH READ ONLY  :默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

例如:

create view v_emp as select * from emp where deptno = 30;

删除视图

DROP VIEW v_emp

二、物化视图

创建物化视图语法结构:

CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED ]①
REFRESH [FAST|COMPLETE|FORCE]② 
[ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT(next_time)]③
AS subquery

语法解析:

① 二选一,默认是 BUILD IMMEDIATE。

  • BUILD IMMEDIATE 创建物化视图的时候就生成数据;
  • BUILD DEFERRED 创建时不生成数据,以后根据需要再生成。理解为创建一个空的视图。

② REFRESH:当基表发生 DML 操作后,物化视图何时采用哪种方式和基表同步数据。

REFRESH 后面跟着的刷新方法有:FAST、COMPLETE、FORCE。

  • FAST:增量刷新,只刷新自上次刷新以后进行的修改。
  • COMPLETE:对整个物化视图进行完全的刷新,相当于先 truncate 再 insert。
  • FORCE:默认的刷新方式。刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。

③ 刷新的模式有两种:

  • ON DEMAND 需要手动刷新物化视图。默认为 ON DEMAND
  • ON COMMIT 在基表发生 COMMIT 操作时刷新。

例如:

create materialized view my_materialized
refresh complete 
on demand start with sysdate next
to_date(concat(to_char(sysdate + 1,'dd-mm-yyyy'),'00:03:00'),'dd-mm-yyyy hh24:mi:ss')  
as select * from  user_info;  

这个物化视图表示从当前日期开始,往后每天 00:03 进行全量覆盖刷新。

删除物化视图

drop materialized view mv_name
posted @ 2022-10-10 18:01  danielzzz  阅读(150)  评论(0编辑  收藏  举报