参考:

视图、索引、存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html

oracle视图总结(转):http://tianwei0131-163-com.iteye.com/blog/1146722

Oracle视图详解:http://blog.itpub.net/29785807/viewspace-1270120/

    (1) 什么是视图

    视图(View)作为一种数据库对象,为用户提供了一个可以检索数据表中的数据方式。用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然在表中。

视图并不存储任何的物理数据, 在数据库中仅仅是只存储视图的定义, 其数据仍然存储在 生成视图的表中。

视图由视图名和视图定义两个部分组成。视图是从一个或多个表导出来的表,它实际上是一个查询结果,视图的名字和视图对应的查询存储在数据字典中。

    视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。 但是, 需要注意的是对待 复杂 语句生成的视图 是只读的,无法更改的。
(2) 视图的优缺点: <1> 视图的优点:
a.数据安全性:对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。
b.简化查询:为复杂的查询建立一个视图,用户只需针对此视图做简单的查询即可。
c.逻辑数据独立性: 将程序与表 通过 视图分隔开来;
d.简化用户权限的管理:可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。
<2> 视图的缺点:
性能:必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,也会把它变成一个复杂的结合体,需要花费一定的时间。
(3) 视图的创建 在创建视图之前需要进行授权: GRANT CREATE VIEW TO VIEW_TEST; CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY] ; 其中:
OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图; FORCE:不管基表是否存在ORACLE都会自动创建该视图;
对于 FORCE:可以创建带有错误的视图, 比如说视图里的字段在基表里不存在,该视图仍然可以创建成功,但是非法的且无法执行。当基表里加入了该字段,或者说某个字段修改成视图里的该字段名称,那么视图马上就可以成为合法的。 NOFORCE:只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名; WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束;
对通过视图进行的增删改操作进行检查,要求增删改操作的数据必须是select查询所能查询到的数据, 因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。 (也就是说在执行INSERTS、UPDATES时,WHERE条件中除需要INSERT、UPDATE本身的限制条件之外,还需要加上视图创建时的WHERE条件。)
示例如下:
CREATE VIEW v_emp
AS SELECT empno,ename,job,deptno FROM emp
WHERE deptno=10
WITH CHECK OPTION CONSTRAINT emp_cnst;
如果有这个限制,那么通过视图v_emp 插入数据的deptno字段的值必须是10,否则就会报“ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句”的异常。 WITH READ ONLY : 该视图上不能进行任何DML操作。 (4) 视图的其他简单操作 修改视图:通过OR REPLACE 重新创建同名视图即可。
删除视图:DROP VIEW VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。
查询视图定义:
SELECT view_name,text FROM USER_VIEWS WHERE VIEW_NAME = 'MY_VIEW';
查询视图/表的 DML 操作权限:
SELECT table_name,column_name,updatable,insertable,deletable
FROM user_updatable_columns WHERE table_name = 'MY_VIEW';
视图的重新编译:
alter view 视图名 compile;
作用:当视图依赖的基表改变后,视图会“失效”。为了确保这种改变“不影响”视图和依赖于该视图的其他对象,应该使用 alter view 语句“明确的重新编译”该视图,从而在运行视图前发现重新编译的错误。视图被重新编译后,若发现错误,则依赖该视图的对象也会失效;若没有错误,视图会变为“有效”。
权限:为了重新编译其他模式中的视图,必须拥有alter any table系统权限。
注意:当访问基表改变后的视图时,oracle会“自动重新编译”这些视图。 (5) 视图 DML 操作 1.简单视图可以执行DML操作;
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行;
3.在视图出现下列情况时不可以通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字, 有诸如AVG\SUM\MAX等聚合函数, 集合运算符(union,intersect,minus);
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。
f.WITH CHECK OPTION 子句 (参考上文)
e.子查询
(6) 视图的类别 在这里有所不同, 常规来说, 仅仅分为 简单视图 和 复杂视图即可:
1.简单视图只从单表里获取数据,复杂视图从多表获取数据;
2.简单视图不包含函数和数据组,复杂视图包含;
3.简单视图可以实现DML操作,复杂视图不可以。
而对于 复杂视图 中的一种特殊视图 连接视图 (指基于多个表建立的视图,一般来说不会在该视图上执行INSERT、UPDATE、DELETE操作。) , DML 规则如下: create view dept1_staff as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.deptno in (10,30) and e.deptno = d.deptno; 如果连接视图中的一个“基表的键”(主键、唯一键)在它的视图中仍然存在,并且“基表的键”仍然是“连接视图中的键”(唯一键);即,某列在基表中是主键|唯一键,在视图中仍然是唯一键,则称这个基表为“键值保存表”(key-Preserved table)。
一般地,由主外键关系的2个表组成的连接视图,外键表就是键值保存表,而主键表不是。 更新准则如下:
一般准则:
1.任何DML操作,只能对视图中的键值保存表进行更新, 即,“不能通过连接视图修 改多个基表”;
2.在DML操作中,“只能使用连接视图定义过的列”;
3.“自连接视图”的所有列都是可更新(增删改)的
insert准则:
1. 在insert语句中不能使用“非键值保存表”中的列(包括“连接列”);
2. 执行insert操作的视图,至少应该“包含”键值保存表中所有设置了约束的列;
3. 如果在定义连接视图时使用了WITH CHECK OPTION 选项,则“不能”针对连接视 图执行insert操作
update准则:
1.键值保存表中的列是可以更新的;
2.如果在定义连接视图时使用了WITH CHECK OPTION 选项,则连接视图中的连接列(一般就是“共有列”)和基表中的“其他共有列”是“不可”更新的,连接列和共有列之外的 其他列是“可以”更新的
delete准则:
1.如果在定义连接视图时使用了WITH CHECK OPTION 选项,依然“可以”针对连接视图执行delete操作
所有的 DML 操作, 要保证能够在 键值保存表 中被正确的执行, 操作。

存在问题: 待补充

视图是基于 查询语句生成, Oracle 对 查询语句 缓存有一定优化, 视图 与 缓存?

Oracle 视图 (待更新, 缓存)的更多相关文章

  1. Oracle视图分类及各种操作讲解(超级好文)

    目录:一.视图的定义: 二.视图的作用: 三.创建视图: 1.权限 2.语法 3.1  创建简单视图   3.2  创建连接视图  3.2.1 连接视图定义  3.2.2 创建连接视图  3.2.3 ...

  2. Oracle视图详解

    转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本 ...

  3. ORACLE 视图的 with check option

    ORACLE 视图的 with check option 我们来看下面的例子: create or replace view testview as select empno,ename from e ...

  4. oracle使用 merge 更新或插入数据

    OracleCC++C#  总结下.使用merge比传统的先判断再选择插入或更新快很多. 1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行, ...

  5. (转)oracle视图详解

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

  6. sublime text3 - vue修改data,视图无更新

    ubuntu系统使用sublime text3做vue开发的时候遇到了一个问题,就是修改vue文件并保存后视图页面并不会随之修改,只有重新run dev时修改才会生效,原因没找到 猜想应该是subli ...

  7. [转]Oracle存在则更新,不存在则插入

    原文:http://hi.baidu.com/mawf2008/item/eec8c7ad1c5be5ae29ce9da6 merge into a using bon (a.a=b.b)when m ...

  8. Oracle -----视图

    视图简介: 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表.视图是存储在数据字典里的一条select语句. 通过创建视图可以提取数 ...

  9. 关于phpcmsv9更新缓存出现链接被重置的问题

    今天安装phpcmsv9后更新缓存出现链接被重置的错误,..找了半天原因. . .原来是apache配置里面的keepAlive显示的是off,,应该将其改为on...然后重新启动apache....

随机推荐

  1. iOS项目开发常用功能静态库

    YHDeveloperTools iOS项目开发常用功能静态库 查看源码 功能方法: 1.字符检查 [NSString checkStringWithType:Email andTargetStrin ...

  2. 从mysql数据库取一条记录里的某个字段的值

    <?php $link = mysqli_connect("localhost","root","root","dbname ...

  3. 【ASP.NET Core】准备工作:在 Windows 10 上配置 Linux 子系统

    ASP.NET Core 其实比传统的 ASP.NET 要简单很多,而且也灵活很多,并且可以跨平台独立运行. 在 Windows 平台上,我们只要在安装 Visual Studio 的时候选择跨平台的 ...

  4. List集合及新特性引用

    ArrayList就是动态数组,也是一个对象. 创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域. 1.ArrayList是用数组实现的,这个数组的内存是连续的,不存在 ...

  5. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...

  6. Codeforces 626A Robot Sequence(模拟)

    A. Robot Sequence time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  7. [bzoj2288][POJ Challenge]生日礼物

    用堆维护双向链表来贪心... 数据范围显然不容许O(nm)的傻逼dp>_<..而且dp光是状态就n*m个了..显然没法优化 大概就会想到贪心乱搞了吧...一开始想贪心地通过几段小的负数把正 ...

  8. SpringMVC框架学习笔记(6)——拦截器

    SpringMVC拦截器需要实现接口HandlerInterceptor 有3个方法,分别在请求处理前.请求处理后和在DispatcherServlet处理后执行 实现代码: package inte ...

  9. Spark性能调优之JVM调优

    Spark性能调优之JVM调优 通过一张图让你明白以下四个问题                1.JVM GC机制,堆内存的组成                2.Spark的调优为什么会和JVM的调 ...

  10. 从零开始学习前端开发 — 7、CSS宽高自适应

    一.宽度自适应 语法:width:100%; 注: a)块状元素的默认宽度为100% b) 当给元素设置宽度为100%时,继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二.高度自适应 语法: ...