DML语句是指用于修改数据的insert、delete和update语句。因为视图是一个虚拟的表,所以这些语句也可以与视图一同使用。一般情况下不通过视图修改数据,而是直接修改基表,因为这样条例更清晰。在视图上使用DML语句有如下限制(相对于表)。
1)DML语句只能修改视图中的一个基表。
2)如果过记录的修改违反了基表的约束条件,则将无法更新视图。
3)如果创建的视图包含连接运算符,DISTINCT运算符、集合运算符、聚合函数和groupby子句,则将无法更新视图。
4)如果创建的视图包含伪列表达式,则将无法更新视图。
简单视图基于单个基表,不包括函数和分组函数,那么可以在此视图中进行insert、update、delete操作,这些操作实际上在基表中插入、更新和删除行。
复杂视图从多个表提取数据,包括函数分组函数。复杂视图不一定能进行DML操作。
4.查询视图
select view_name from user_views;
5.删除视图
drop view view_name;
6.物化视图
含义:
就是具有物理存储的特殊视图,占据物理空间,就像表一样
是远程数据的本地副本,或者用来生成基于数据表求和的汇总表
物化视图中两个重要概念:查询重写和物化视图同步
(1)查询重写:对sql语句进行重写,当用户使用sql语句对基表进行查询时,如果已经建立了基于这些表的物化视图,oracle将自动计算和使用物化视图来完成查询,在某些情况下可以节约查询时间,减少系统i/o。Oracle将这种查询优化技术成为查询重写。参数QUERY_REWRITE_ENABLED决定是否使用重写查询,该参数为布尔型。在创建物化视图需要用ENABLE_QUERY REWRITE来启动查询重写功能。通过SHOW指令可以查看该参数的值。
(2)物化视图的同步:
物化视图是基于表创建的,所以当基表变化时,需要同步数据以更新物化视图中的数据,这样保持物化视图中的数据和基表的数据一致性。Oracle提供了两种物化视图的刷新方式,决定何时进行刷新,即ON COMMIT方式和ON DEMAND方式。
ON COMMIT方式:指物化视图在对基表的DML操作事务提交的同时进行刷新。
ON DEMAND方式:指物化视图在用户需要的时候进行更新,可以手工通过DBMS_MVIEW.REFRESH等方式来进行刷新,也可以通过JOB定时进行刷新。
选择刷新方式之后,还需要选择一种刷新类型,刷新类型指定刷新时基表与物化视图如何实现数据的同步,oracle提供了以下4种刷新类型。
COMPLETE:对整个物化视图进行完全的刷新。
FAST:采用增量刷新,只刷新自上次刷新后进行的修改。
FORCE:oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE方式。
NEVER:物化视图不进行任何刷新。
默认值是FORCE刷新类型。
创建物化视图