1. 视图的理解
sql
视图其实就是一条查询SQL语句,用于显示一个(或多个)表或其它视图中的相关数据。视图将一个查询的结果做为一个表来使用。所以视图能够被看作是存储在系统中的一张虚拟表。视图源于表,全部对视图数据的修改最终都会被反映到视图的基表中。
数据库
2. 视图的存储安全
与表不同,视图不要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据都是从基表获取,这些数据在视图被引用时动态的生成。性能
3. 视图的做用
code
用户能够经过视图以不一样的形式来显示基表中的数据,视图的强大之处在于它可以根据不一样用户的须要来对基表中的数据进行整理。视图常见的用途以下:对象
3.1 经过视图能够设定容许用户访问某些列或某些行数据
内存
为表提供了额外的安全控制class
3.2 隐藏数据的复杂性select
视图中一般会使用一些很复杂的SQL语句,如join等,用多个表中相关的列构成一个新的数据集,这个视图就隐藏了数据来源于多个表的现象引用
3.3 简化用户的SQL语句
用户使用视图就能够从中获取到多个表的信息,不须要关心这些表是如何链接的。
3.4 视图的列名能够被任意改变,而不会影响视图的基表
这可使应用程序不受基表定义/改变的影响。例如:在一个视图的定义中查询了一个包含4列的基表中的3列数据,当基表中添加了新的列后,因为视图的定义并无被影响,所以使用此视图的应用程序也不会被影响。
3.5 保存复杂查询
一个查询可能会对多张表进行复杂的计算,用户将这个查询保存为视图以后,之后每次进行相似计算只须要查询这个视图便可。
3.6 逻辑数据独立性
视图可使应用程序和数据库表在必定程度上独立。若是没有视图,应用是创建在表上的,有了视图以后,程序能够创建在视图之上,从而程序与数据库表分割开来。
4. 视图的工做机制
视图的定义就是查询语句,Oracle将这个定义以文本形式存储在数据字典中。当用户在SQL语句中引用该视图时,Oracle将进行如下工做:
1>将引用了视图的语句与视图的定义语句整合成一个语句
2>在共享SQL区解析整合后的语句
3>执行整合后的语句
4>当现有的共享SQL区中没有与整合后的语句一致时,Oralce会为此语句建立新的共享SQL区。所以,引用了视图的SQL语句也可以利用已有的共享SQL区以达到节约内存和提升性能的目的。
5. 视图的依赖性
因为视图的定义是一个引用了其它对象(表,视图)的查询,所以视图依赖于其所引用的对象。
6. 视图的建立
create or replace view demo_view(name,age) as select tu.user_name,tu.age from t_user tu;
备注:括号里面的name,age是select获得的结果的别名
7. 视图的调用及结果