oracle 视图(view)

1,视图分为两种
  第一种:可更新的视图
  第二种:连接视图(由连接表的sql生成的视图)

2,视图的概念:
  视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)。
3,视图的存储
  与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
4,视图的作用:
    通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制 
    视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐
    藏了数据来源于多个表的事实。
    保存复杂查询
5,视图的工作机制:
   视图的定义就是其使用的查询语句,Oracle 将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作:
    将引用了视图的语句与视图的定义语句整合为一个语句
在共享SQL 区解析整合后的语句
   执行此语句
   当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享 SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。

   
6.可更新的连接视图

连接视图是指在一个视图的定义查询的from字句中引用了多个表或视图。而可更新的连接视图是指能够执行 UPDATE,INSERT,和 DELETE 操作的连接视图。为了保证视图是可更新的,其定义中不能包含以下语法结构:

集合操作符
DISTINCT 操作符
聚合函数或分析型函数
GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
在 SELECT 之后的列表中使用集合表达式
在 SELECT 之后的列表中使用子查询
连接(join)(但是有例外情况)
对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修改。


7,创建视图:
  create or replace view view_scott_dept as
  select * from dept;
  commit;

8, 向视图中插入数据(也就是向视图的基表中插入数据)
   insert into view_scott_dept values(3,'xxx','dddd');
   commit;

9,删除视图中的数据(月就是删除视图基表中的数据)
 
 delete from view_scott_dept where deptno = 3

猜你喜欢

转载自supanccy2013.iteye.com/blog/1997116