Oracle中的视图

1.视图的定义

视图 : 属于数据库对象之一
表、视图、序列、索引、同义词、触发器
视图,是一个虚表。建立在表的基础之上
注意:可以建立在一张表,或多张表

视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候,只是重新执行SQL。

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

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

视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

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

tips: 查询视图没有什么限制, 插入/更新/删除视图的操作会受到一定的限制; 所有针对视图的操作都会影响到视图的基表; 为了防止用户通过视图间接修改基表的数据, 可以将视图创建为只读视图(带上with read only选项)

2.视图的好处

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

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

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

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

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

3.定义视图

某个用户在创建视图时,可能权限不足。需要授权。
过sys 授予scott 创建视图的权限。
撤销revoke create view from scott;
创建grant xxxx to scott(grant create any view to scott;)

create  view 视图名
as 
select ...语句




create  view  myempview
as 
select d.deptno 部门编号,e.empno,e.ename,e.sal,e.comm ,d.dname from emp e ,dept d where e.deptno=d.deptno and  d.deptno=20; 

4.操作视图

操作视图: DML(增删改) +Query(查) 和表完全一致

尝试修改视图时:update myempview set ename = ‘hello’ where empno=7934 ;
报错:无法修改与非键值保存表对应的列
如果操作表因为是两张表生成的视图,会发生不知道操作那张表,所以尽量使用视图的时候,只是查询

4.1 with check option

create view 视图名
as
select 语句..
with check option ;
with check option :限制对视图操作时,必须满足where子句


drop  view myempview ;

create view myempview
as
select empno ,ename ,deptno from emp where deptno =20   with check option;

4.2 with read only

视图只建议查看,不建议DML。因为对视图的操作,会影响原表。

create view myempview
as
   select empno ,ename ,deptno from emp where deptno =20   with read only ;



4.3 在增删改view的时候,需要遵守的条件

①当视图中存在以下之一时,不能Insert/update
group by 、distinct、组函数、列的定义为表达式
②当视图中存在以下之一时, 不能delete
group by 、distinct、rownum伪劣

不建议对视图进行增删改

5. 简单视图与复杂视图

简单视图复杂视图
表的数量11~n
函数没有
分组没有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值