Oracle 中的视图理解

Oracle 中的视图理解

Oracle 中的视图理解

1.视图的概述

视图其实就是一条查询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

2.视图的存储

与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。

3.视图的作用

用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。也就是说根据不同的需求创建不同的视图,

通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制隐藏数据复杂性 视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏了数据来源于多个表的事实。

31简化用户的SQL 语句

用户使用视图就可从多个表中查询信息,而无需了解这些表是如何连接的。以不同的角度来显示基表中的数据 视图的列名可以被任意改变,而不会影响此视图的基表 使应用程序不会受基表定义改变的影响 ,实际上就是SQL语句操作的结果作为视图的基表来使用。

3.2保存复杂查询

一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。 逻辑数据独立性 视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。原始数据安全

4.视图的工作机制

视图的定义就是其使用的查询语句,Oracle将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作: 将引用了视图的语句与视图的定义语句整合为一个语句 在共享SQL 区解析整合后的语句 执行此语句 当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。

5.视图的依赖性

 

由于视图的定义是一个引用了其他对象(表,视图)的查询,因此视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。

6.可更新的连接视图

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

集合操作符

DISTINCT 操作符

聚合函数或分析型函数

GROUP BYORDER BYCONNECT BY,或 START WITH 字句

SELECT 之后的列表中使用集合表达式

SELECT 之后的列表中使用子查询

连接(join)(但是有例外情况

对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修改。

转载于:https://my.oschina.net/u/267492/blog/74447

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110339.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 几个要注意的TIPS

    几个要注意的TIPS

  • sql与hsql的区别以及分别怎么用!

    sql与hsql的区别以及分别怎么用!在java开发当中,会用到一些框架,比如说sh(struts和hibernate),ssh(struts,spring以及hibernate)等这些框架,hibernate因为连表方便,直接将表映射到java实体类中,因此用到的比较广泛,那sql和hsql区别在于哪里呢?又如何使用呢?1.java中用sql实现增删改查,sql是直接面向数据库的,下面附上一段代码解析:try{24…

  • 庆祝kkkbo出道!

    庆祝kkkbo出道!希望学编程有始有终,不做弱者,不做断者-常思华联兴之日子,多念华联兴之饭菜,忆图思苦,勉励自身。

  • 初识公有云和私有云

    初识公有云和私有云最近刚开始接触云,粗浅记录下来自己的学习。第一个问题:什么是云计算?第二个问题:为什么要上云?第三个问题:公有云和私有云有什么区别,应该怎么选?云计算,是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。【百度百科】举例来讲,建立一个超级数据中心,提高算力,达到普通电脑无法企及的每秒10万亿次的运算能力,一般用户在付费后则可通过

  • python3 typing_python 高级

    python3 typing_python 高级typing介绍Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返回什

  • 语义分割 实例分割 全景分割_语义分割转实例分割

    语义分割 实例分割 全景分割_语义分割转实例分割之前看过一篇使用分割思想进行目标检测,所以这里补习下一些分割相关的基础知识。这里重点说下语义分割、实力分割和全景分割的区别。1、semanticsegmentation(语义分割)通常意义上的目标分割指的就是语义分割,图像语义分割,简而言之就是对一张图片上的所有像素点进行分类语义分割(下图左)就是需要区分到图中每一点像素点,而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号