笔记系列----视图

6 篇文章 0 订阅

1.为什么使用视图

1)限制数据的存取:用户只可以看见基表部分信息。   方法:赋予用户访问视图对象的权限,而不是表的对象权限

2)使复杂的查询变得容易(内联视图)

3)提供数据的独立性

并不存数据库,而是根据视图定义访问基表;基表删了,视图对象还在;典型对象,有权限的区别

简单试图(可以改,通过试图改基表,可做update)和复杂视图(键值保留表)

特性简单试图复杂视图
表个数11..n
含函数
含组函数
含distinct
DML操作可以不一定

复杂试图可以设置instance触发器来修改;

视图是用来查询的,修改的话会受限制

2.语法

create [or replace] [force|noforce] view view

        [(alias[,alias]...)]

as subquery(子查询,访问的基表)

[with check option [constraint constraint]]

[with read only]

2.1 force的作用:可以先建视图,后键基表

create force view view1 as select * from test1;

2.2 with check option作用:对视图where子句进行约束。不允许对限定关键字修改

create view view2 as select * from emp deptno=10 with check option;

2.3 with read only 作用:禁止对试图执行DML操作

create view view3 as select * from emp where deptno=10 with read only;

2.4 关于视图的注意事项

1)  只要视图中的数据不是来自基表的原始数据,就尽量不要对该数据做DML操作;

2)视图的DML操作

含有如下情况,则不能删除视图中的数据

  • 含有聚合函数
  • 含有group by子句
  • 含有distinct关键字
  • 含有rownum这个伪列

含有如下情况,不能修改该视图中的数据:

  • 上面提到的任意一种情况
  • 列由表达式来定义

含有如下情况,不能增加该视图中的数据:

  • 上面提到的任何一种情况
  • 在基表中包含有not null约束的列,然而该列并没有在视图中出现

3.复杂视图的更新,键保留表的概念

select * from user_views

如果建立了视图 想查看其中的定义,可以访问如下视图dba_views中的text字段(long型);

自建pl/sql过程,参照一下

declare
v_text dba_views.text%type;
v_name dba_views.view_name%type;
begin
select text,view_name into v_test,v_name from dba_views where view_name='V1';
dbms_output.put_line(v_name||'define is:'||v_text);
end;
/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值