加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle-----视图/物化视图

发布时间:2020-12-12 13:18:43 所属栏目:百科 来源:网络整理
导读:什么是视图 ? 视图(view),也称虚表,?不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。 ? 视图只有逻辑定义。每次使用的时候,只是重新执行SQL。 ??视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些

什么是视图

? 视图(view),也称虚表,?不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。

? 视图只有逻辑定义。每次使用的时候,只是重新执行SQL。

??视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

??视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。

??视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。

? 当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

??还有一种视图:物化视图(MATERIALIZED VIEW?),也称实体化视图,快照?(8i?以前的说法)?,它是含有数据的,占用存储空间。

视图的作用

1)提供各种数据表现形式,?可以使用各种不同的方式将基表的数据展现在用户面前,?以便符合用户的使用习惯(主要手段:?使用别名);

2)隐藏数据的逻辑复杂性并简化查询语句,?多表查询语句一般是比较复杂的,?而且用户需要了解表之间的关系,?否则容易写错;?如果基于这样的查询语句创建一个视图,?用户就可以直接对这个视图进行"简单查询"而获得结果.?这样就隐藏了数据的复杂性并简化了查询语句.这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义);

3)执行某些必须使用视图的查询.?某些查询必须借助视图的帮助才能完成.?比如,?有些查询需要连接一个分组统计后的表和另一表,?这时就可以先基于分组统计的结果创建一个视图,?然后在查询中连接这个视图和另一个表就可以了;

4)提供某些安全性保证.?视图提供了一种可以控制的方式,?即可以让不同的用户看见不同的列,?而不允许访问那些敏感的列,?这样就可以保证敏感数据不被用户看见;

5)简化用户权限的管理.?可以将视图的权限授予用户,?而不必将基表中某些列的权限授予用户,?这样就简化了用户权限的定义。

创建视图

1、权限

要在当前用户中创建视图,?用户必须具有create view系统权限;

要在其他用户中创建视图,?用户必须具有create any view系统权限.?视图的功能取决于视图拥有者的权限。

2、语法

? ??create [ or replace ] [ force ] view [schema.]view_name
????????????????????? [ (column1,column2,...) ]
????????????????????? as?
????????????????????? select ...
????????????????????? [ with check option ]? ? ? [ constraint constraint_name ]
????????????????????? [ with read only ];

tips:
?1 or replace:?如果存在同名的视图,?则使用新视图"替代"已有的视图
?2 force:?"强制"创建视图,不考虑基表是否存在,也不考虑是否具有使用基表的权限
?3 column1,...视图的列名,?列名的个数必须与select查询中列的个数相同;?如果select查询包含函数或表达式,?则必须为其定义列名.此时,?既可以用column1,column2指定列名,?也可以在select查询中指定列名.
?4 with check option:?指定对视图执行的dml操作必须满足“视图子查询”的条件即,对通过视图进行的增删改操作进行"检查",要求增删改操作的数据,?必须是select查询所能查询到的数据,否则不允许操作并返回错误提示.?默认情况下,?在增删改之前"并不会检查"这些行是否能被select查询检索到.?
?5 with read only创建的视图只能用于查询数据,?而不能用于更改数据.

3、创建简单视图

简单视图定义:是指基于单个表建立的,不包含任何函数、表达式和分组数据的视图。

create user C##ljy identified by ljy;  --12C的库在CDB下
grant dba to C##ljy;
conn C##ljy/ljy
Create Table Cstable (Id Int,Age Int,Name Varchar2(8),Address Varchar2(20));---创建测试表
Insert Into Cstable Values(1,13,‘张三‘,‘深圳‘);
Insert Into Cstable Values(2,23,‘李四‘,‘上海‘);
Insert Into Cstable Values(3,‘王五‘,‘北京‘);
Insert Into Cstable Values(4,43,‘刘心‘,‘北京‘);
Insert Into Cstable Values(5,11,‘刘开心‘,‘北京‘);
commit;

create view vw_emp as select name,address from cstable; ----创建物化视图
desc vw_emp           ---查看物化视图结构
select * from vw_emp where name =‘王五‘;   物化视图的使用

4、物化视图简单操作

对视图进行简单的DML操作,基表也会发生变化。

insert into vw_emp values(‘李旭‘,‘南京‘);
select * from vw_emp;
select * from cstable;
update vw_emp set address=‘阿拉伯‘ where name = ‘刘心‘;
delete vw_emp where name = ‘刘心‘;

5、创建只读视图

只能查询不能进行操作,更改基表,视图也会变化。

create view vw_emp2 as select name,address from cstable with read only; ----创建物化视图

6、创建检查约束视图with check option 

创建检查视图:对通过视图进行的增删改操作进行检查,要求增删改操作的数据必须是select查询所能查询到的数据

create view vw_emp3 as select name,address from cstable with check option;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读