以下是我在甲骨文的一些观点的简单总结。希望能和大家一起学习和探讨。
1.视图的概述
视图实际上是一个查询sql语句,用于在一个或多个表或其他视图中显示相关数据。视图使用查询的结果作为表,因此视图可以被视为存储查询或虚拟表。视图来自表,对视图数据的所有修改最终都会反映在视图的基表中。这些修改必须遵守基表的完整性约束,并且还将触发基表上定义的触发器。(Oracle支持触发器的显式定义和视图上的一些逻辑约束)
2.视图的存储
与表不同,视图不需要分配存储空间,也不包含实际数据。视图只定义了一个查询,视图中的数据是从基表中获取的,基表是在引用视图时动态生成的。因为视图基于数据库中的其他对象,所以视图只需要占用数据字典中存储其定义的空间,而不需要额外的存储空间。
3.视图的作用
用户可以通过视图以不同的形式显示基表中的数据。视图的强大之处在于,它可以根据不同用户的需求对基表中的数据进行整理。视图的常见用法如下:视图可以设置允许用户访问的列和数据行,从而为表提供额外的安全控制。
隐藏数据复杂性
您可以在视图中使用join来形成一个新的数据集,其中包含多个表中的相关列。这个视图对用户隐藏了数据来自多个表的事实。
简化用户的SQL 语句
用户视图可以从多个表中查询信息,而无需知道这些表是如何连接的。从不同角度显示基表中的数据。
视图的列名可以任意更改,而不会影响该视图的基表,这样应用程序就不会受到基表定义更改的影响。
在视图的定义中,查询包含四个数据列的基表中的三列。当向基表中添加新列时,视图的定义不受影响,因此使用该视图的应用程序不会受到影响。
保存复杂查询
查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图后,每次进行类似的计算时,只需要查询这个视图。数据的逻辑独立性
视图可以使应用程序和数据库表在某种程度上相互独立。如果没有视图,应用程序必须构建在表上。有了视图,程序可以建立在视图上,这样程序和数据库表就被视图分开了。
4.视图的工作机制
视图的定义是它使用的查询语句。Oracle将该定义作为文本存储在数据字典中。当用户引用SQL语句中的视图时,Oracle将执行以下操作:
将引用该视图的语句与该视图的定义语句集成为一条语句,在共享SQL区解析集成的语句并执行这条语句。当现有的共享SQL区域与集成语句不一致时,Oracle将为此语句创建一个新的共享SQL区域。因此,引用视图的SQL语句也可以使用现有的共享SQL区域来节省内存和提高性能。
5.视图的依赖性
因为视图的定义是引用其他对象(表、视图)的查询,所以视图依赖于它所引用的对象。Oracle自动处理视图的依赖性。例如,当用户删除视图的基表,然后重新构建时,Oracle会检查新的基表是否符合视图的定义,并判断视图的有效性。
6.可更新的连接视图
联接视图是指视图定义查询的from语句中对多个表或视图的引用。可更新联接视图是指可以执行更新、插入和删除操作的联接视图。为了确保视图可更新,不能在其定义中包含以下语法结构:
集合运算符DISTINCT运算符聚合函数或分析函数GROUP BY、ORDER BY、CONNECT BY或START WITH语句在SELECT之后的列表中使用集合表达式,在SELECT之后的列表中使用子查询join(但也有例外)。对于不可更新的视图,可以使用INSTEAD OF触发器来修改它们的数据。