视图其实就是一条查询sql语句,用于显示一个或多个表或其余视图中的相关数据。视图将一个查询的结果做为一个表来使用,所以视图能够被看做是存储的查询或一个虚拟表。视图来源于表,视图自己就是一个查询结果因此对视图的修改我我的认为没有任何意义,并且视图不能更新视图建立时候有两个选项分别是sql
(1) 选择项WITH CHECK OPTION表示对视图进行UPDATE INSERT DELETE操做时,要保证操做的数据知足视图定义的谓词条件,也就是视图子查询中的WHERE子句的条件数据库
(2) 选项WITH READ ONLY 只读视图,不容许经过本视图更新本表安全
视图建立语句: Create [or Replace] VIEW VIEW_NAME AS 子查询【WITH CHECK OPTION】【WITH READ ONLY】函数
视图的删除:DROP VIEW VIEW_NAME
与表不一样,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。因为视图基于数据库中的其余对象,所以一个视图只须要占用数据字典中保存其定义的空间,而无需额外的存储空间。 性能
用户能够经过视图以不一样形式来显示基表中的数据,视图的强大之处在于它可以根据不一样用户的须要来对基表中的数据进行整理。也就是说根据不一样的需求建立不一样的视图, spa
经过视图能够设定容许用户访问的列和数据行,从而为表提供了额外的安全控制隐藏数据复杂性 视图中可使用链接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏了数据来源于多个表的事实。 code
用户使用视图就可从多个表中查询信息,而无需了解这些表是如何链接的。以不一样的角度来显示基表中的数据 视图的列名能够被任意改变,而不会影响此视图的基表 使应用程序不会受基表定义改变的影响 ,实际上就是SQL语句操做的结果做为视图的基表来使用。orm
一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图以后,每次进行相似计算只需查询此视图便可。 逻辑数据独立性 视图可使应用程序和数据库表在必定程度上独立。若是没有视图,应用必定是创建在表上的。有了视图以后,程序能够创建在视图之上,从而程序与数据库表被视图分割开来。原始数据安全 对象
视图的定义就是其使用的查询语句,Oracle将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行如下工做: 将引用了视图的语句与视图的定义语句整合为一个语句 在共享SQL 区解析整合后的语句 执行此语句 当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句建立新的共享SQL 区。所以,引用了视图的SQL 语句也可以利用已有的共享 SQL 区以达到节约内存和提升性能的目的。 内存
因为视图的定义是一个引用了其余对象(表,视图)的查询,所以视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。
链接视图是指在一个视图的定义查询的from字句中引用了多个表或视图。而可更新的链接视图是指可以执行 UPDATE,INSERT,和 DELETE 操做的链接视图。为了保证视图是可更新的,其定义中不能包含如下语法结构:
集合操做符
DISTINCT 操做符
聚合函数或分析型函数
GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
在 SELECT 以后的列表中使用集合表达式
在 SELECT 以后的列表中使用子查询
链接(join)(可是有例外状况)
对于不可更新的视图,能够利用 INSTEAD OF 触发器对其数据进行修改。