Oracle进阶(1)——视图

本文介绍了数据库视图,包括其概念、优点以及创建、修改语法。重点讲解了视图如何简化数据操作、提供安全性和向后兼容性。同时,详细剖析了物化视图的定义、区别及其创建和刷新策略。
摘要由CSDN通过智能技术生成

一、什么是视图

        视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视 图所对应的数据并不真正地存储在视图中,而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合,它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。

(1)视图的优点

使用视图的优点:

1.简化数据操作:视图可以简化用户处理数据的方式。

2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。

3.视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。

4.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口。

(2)创建或修改视图语法

create [or replace] [force] view view_name

as

subquery

[with check option ]

[with read only]

选项解释:

OR REPLACE

若所创建的试图已经存在,ORACLE 自动重建该视图

FORCE

不管基表是否存在 ORACLE 都会自动创建该视图

subquery

一条完整的 SELECT 语句,可以在该语句中定义别名;

WITH    CHECK    OPTION

插入或修改的数据行必须满足视图定义的约束;

WITH READ ONLY

该视图上不能进行任何 DML 操作

(3)视图案例

1-简单视图的创建与使用

        什么是简单视图?如果视图中的语句只是单表查询,并且没有聚合函数,我们就称之为简单视图。

需求:创建视图:业主类型为 1 的业主信息

语句:

create or replace view view_owners1 as

select * from t_owners where ownertypeid=1

利用该视图进行查询

select * from view_owners1 where addressid=1;

2-带检查约束的视图

需求:根据地址表( T_ADDRESS)创建视图 VIEW_ADDRESS2 , 内容为区域 ID 为 2 的记录。

语句:

create or replace view view_address2 as

select * from T_ADDRESS where areaid=2

with check option

执行下列更新语句:

update view_address2 set areaid=1 where id=4

此时会有提示是:

案例

-- todo 1 创建视图: 查询 区域类型为 3 的地址信息, 携带 with check option
-- todo 2 使用视图 查询 区域类型为 3 的地址信息
-- todo 3 修改视图的列值 name=新值, 是否报错?
-- todo 4 修改视图的列值 areaid=新值, 是否报错?
-- todo 5 验证

实现

-- todo 1 创建视图: 查询 区域类型为 3 的地址信息, 携带 with check option
create or replace view view_addr_2
as
select * from T_ADDRESS
where areaid=3
with check option
;


-- todo 2 使用视图 查询 区域类型为 3 的地址信息
select * from view_addr_2;

-- todo 3 修改视图的列值 name=新值, 是否报错?
update view_addr_2 set name='霍营地铁站' where areaid=2;
commit;

-- todo 4 修改视图的列值 areaid=新值, 是否报错?
update view_addr_2 set areaid=3 where id=3;
commit;

-- todo 5 验证
select * from view_addr;
select * from T_ADDRESS;

3-只读视图的创建与使用

        如果我们创建一个视图,并不希望用户能对视图进行修改,那我们就需要创建视

图时指定 WITH READ ONLY 选项,这样创建的视图就是一个只读视图。

需求:将上边的视图修改为只读视图

语句:

create or replace view view_owners1 as

select * from T_OWNERS where ownertypeid=1

with read only

修改后,再次执行 update 语句,会出现如下错误提示

update view_owners1 set name='和珅'  where id=2;

案例

-- todo 1 创建视图: 查询 区域类型为 3 的地址信息, 只读
-- todo 2 使用视图 查询 区域类型为 3 的地址信息
-- todo 3 修改视图的列值 name=新值, 是否报错?

实现

-- todo 1 创建视图: 查询 区域类型为 3 的地址信息, 只读
create or replace view view_addr_3
as
select * from T_ADDRESS
where areaid=3
with read only
;

-- todo 2 使用视图 查询 区域类型为 3 的地址信息
select * from view_addr_3;

-- todo 3 修改视图的列值 name=新值, 是否报错?
update view_addr_3 set name='西三期' where id=7;
commit;

4-创建带错误的视图

我们创建一个视图,如果视图的 SQL 语句所设计的表并不存在,如下

create or replace view view_temp as

select * from t_temp

T_TEMP 表并不存在,此时系统会给出错误提示

有的时候,我们创建视图时的表可能并不存在,但是以后可能会存在,我们如果

此时需要创建这样的视图,需要添加 FORCE  选项,SQL 语句如下:

create or replace force view view_temp as

select * from t_temp

此时视图创建成功。

二、物化视图

​​​​​​​(1)什么是物化视图

视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集。每次访问它都会导致这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图)。

物化视图与普通的视图相比的区别是物化视图是建立的副本,它类似于一张表,需要占用存储空间。

而对一个物化视图查询的执行效率与查询一个表是一样的。

​​​​​​​(2)创建物化视图语法

create materialized 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 DEFERRED    则在创建时不生成数据,以后根据需要再生成数据。
    1. 默认为 BUILD IMMEDIATE。
  • 刷新( REFRESH ):指当基表发生了 DML 操作后,物化视图何时采用哪种方式和基表进行同步。
  • REFRESH 后跟着指定的刷新方法有三种:FAST、COMPLETE、FORCE。
    1. FAST 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。
    2. COMPLETE 刷新对整 个物化视图进行完全的刷新。
    3. 如果选择 FORCE 方式,则 Oracle 在刷新时会去判断是否可以进行快速刷新,如果可以则采用 FAST 方式,否则采用 COMPLETE的方式,FORCE 是默认的方刷新的
    4. 模式有两种:ON DEMAND 和 ON COMMIT 。
      1. ON DEMAND 指需要 手动刷新物化视图(默认)。
      2. ON COMMIT 指在基表发生 COMMIT 操作时自动刷新。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值