达梦数据库视图

  • 定义

视图分类:简单视图,复杂视图,物化视图。

简单视图:

简单视图和复杂视图不占磁盘空间,实际上是一个虚表,真正数据存储 base table.

简单视图可以 dml(insert update,delete)

复杂视图:

复杂视图不允许直接 DML,需要通过触发器来完成,触发器创建时,不需要使用 before after,而将替换成 instead of.

当视图中包含以下结构之一,就是表示不可更新的视图,都不允许直接 dml:

  • 具有集合操作的(union、union all、minus..)
  • 具有分组函数的
  • 具有 group by  having start...withØ
  • 具有 distinct
  • 具有集合运算连接。

物化视图:

数据要单独存储,占用磁盘空间,规划表空间。物化视图的数据来自于基表,基表发生的变化,物化视图可以根据更新方式来进行数据更新。

更新方式:

  • 手动(默认的方式):demand
  • 自动更新:commit

如何更新:

  • FAST ----快速更新
  • Complete --完全更新
  • Force----选择性更新
  • Never---不更新。

查看物化视图:

select * from SYS.USER_MVIEWS;

 

  • 创建

语法格式:

CREATE MATERIALIZED VIEW [<模式名>.]<物化视图名>[(<列名>{,<列名>})][BUILD

IMMEDIATE|BUILD DEFERRED][<STORAGE 子句>][<物化视图刷新选项>][<查询改写选项>]AS<查询说明>

<STORAGE 子句>::=

<查询说明>::= <表查询> | <表连接>

<表查询>::=<子查询表达式>[ORDER BY 子句]

<物化视图刷新选项> ::= REFRESH <刷新选项> {<刷新选项>} | NEVER REFRESH

<刷新选项> ::= [<刷新方法>][<刷新时机>][<刷新规则>]

<刷新方法> ::= FAST | COMPLETE | FORCE

<刷新时机> ::= [ON DEMAND | ON COMMIT] [START WITH datetime_expr | NEXT

datetime_expr]

<刷新规则> ::= WITH PRIMARY KEY | WITH ROWID

<查询改写选项>::= [DISABLE | ENABLE] QUERY REWRITE

<datetime_expr>::= SYSDATE[+<数值常量>]

参数

1. <模式名> 指明被创建的视图属于哪个模式,缺省为当前模式;

2. <物化视图名> 指明被创建的物化视图的名称;

3. <列名> 指明被创建的物化视图中列的名称;

4. [BUILD IMMEDIATE|BUILD DEFERRED] 指明 BUILD IMMEDIATE 为立即填

充数据,默认为立即填充;BUILD DEFERRED 为延迟填充,使用这种方式要求第

一次刷新必须为 COMPLETE 完全刷新。

5. <子查询表达式> 标识物化视图所基于的表的行和列。其语法遵照 SELECT 语句

的语法规则;

6. <表连接>参照表连接查询;

7. 定义查询中的 ORDER BY 子句仅在创建物化视图时使用,此后 ORDER BY 被忽略;

8. 刷新方法 

  1. l FAST (快速刷新)

根据相关表上的数据更改记录进行增量刷新。普通 DML 操作生成的记录存在于物化视图日志。使用 FAST 刷新之前,必须先建好物化视图日志。

  1.   COMPLETE (完全刷新)

通过执行物化视图的定义脚本进行完全刷新。

  1. l FORCE (选择性刷新)

默认选项。当快速刷新可用时采用快速刷新,否则采用完全刷新。

9.刷新时机

  1. ON DEMAND

由用户通过 REFRESH 语法进行手动刷新。如果指定了 START WITH 和 NEXT

子句就没有必要指定 ON DEMAND。

  1. ON COMMIT

在相关表上视图提交时进行快速刷新。刷新是由异步线程执行的,因此COMMIT 执行结束后可能需要等待一段时间物化视图数据才是最新的。

约束:

含有对象类型的不支持;

包含远程表的不支持。

  1. START WITH datetime_expr | NEXT datetime_expr

START WITH 用于指定首次刷新物化视图的时间,NEXT 指定自动刷新的间隔;如果省略 START WITH 则首次刷新时间为当前时间加上 NEXT 指定的间隔;如果指定 START WITH 省略 NEXT 则物化视图只会刷新一次;如果二者都未指定物化视图不会自动刷新。

10. 刷新规则

  1. WITH PRIMARY KEY

默认选项。

只能基于单表 

Ø 必须含有 PRIMARY KEY 约束,选择列必须直接含有所有的 PRIMARY

KEY(UPPER(col_name)的形式不可接受)

Ø 不能含有对象类型

  1. WITH ROWID

Ø 只能基于单表

Ø 不能含有对象类型

Ø 如果使用 WITH ROWID 的同时使用快速刷新,则必须将 ROWID 提取

出来,和其他列名一起,以别名的形式显示

11. NEVER REFRESH 物化视图从不进行刷新。可以通过 ALTER MATERALIZED VIEW

<物化视图名> FRESH 进行更改;

12. QUERY REWRITE 选项

  • ENABLE

允许物化视图用于查询改写。

  • DISABLE

禁止物化视图用于查询改写。

目前 DM8 仅语法支持查询改写选项,实际功能未实现。

13. datetime_expr 只能是日期常量表达式,SYSDATE[+<数值常量>]或日期间隔;

14. 如果物化视图中包含大字段列,需要用户手动指定 STORAGE(USING LONG ROW)

  • 举例

举例1:

create table test.t1(c1 int,c2 varchar);

insert into test.t1 values(1,'china');

insert into test.t1 values(2,'english');

commit;

create materialized view TEST.MV1 AS SELECT * FROM TEST.T1;

select * from TEST.MV1;

 

---修改 t1 的值,手动更新 mv1

update "TEST"."T1" set "C2" = 'chinese' where c1=1;

commit;

REFRESH materialized view test.mv1;

select * from TEST.MV1;

 

举例2:

create table test.t2(c1 int,c2 varchar);

alter table "TEST"."T2" add primary key("C1");

---创建一个自动更新的物化视图(要有物视图日志)

create materialized view log on test.t2;

---创建快速更新物化视图

create materialized view test.mv2 refresh fast on commit as select * from test.t2;

select * from test.mv2;

 

插入新的数据并提交:

insert into test.t2 values(1,'china');

insert into test.t2 values(2,'english');

insert into test.t2 values(3,'usa');

commit;

select * from test.mv2;

 

--创建完全更新的物化视图

create materialized view test.mv3 refresh complete on commit as select * from test.t2; 

select * from test.mv3;

插入新的数据并提交:

insert into test.t2 values(1,'china');

insert into test.t2 values(2,'english');

insert into test.t2 values(3,'usa');

commit;

select * from test.mv2;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值