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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 了解HashMap数据结构,超详细!

    了解HashMap数据结构,超详细!写在前面:小伙伴儿们,大家好!今天来学习HashMap相关内容,作为面试必问的知识点,来深入了解一波!思维导图:学习框架图1,HashMap集合简介HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。JDK1.8之前的HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为

    2022年5月19日
    44
  • ubuntu android studio_android自启动

    ubuntu android studio_android自启动(1)添加头文件:#include(2)在特定驱动结构体中添加early_suspend结构:#ifdefCONFIG_HAS_EARLYSUSPENDstructearly_suspendearly_suspend;#endif(3)在驱动probe函数中注册相关early_suspend结构体:#ifdefCONFIG_HAS_EARLYSUSPEND

    2022年9月18日
    3
  • 字符串类型的时间和时间类型的相互转换

    字符串类型的时间和时间类型的相互转换publicstaticDategetDate(StringsDate)throwsException{Datedate=newDate(); SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");  //要转换的格式SimpleDateFormatsdf2=newSimpleDateFormat("yyy…

    2022年5月15日
    33
  • oracle表空间权限赋予,oracle创建表空间以及给用户授予权限[通俗易懂]

    oracle表空间权限赋予,oracle创建表空间以及给用户授予权限[通俗易懂]–创建表空间–语法:createtablespace表空间名datafile’路径’size100M[aotuextendto];createtablespacemyspacedatafile’d:/myspace/myspace.dbf’size100Mautoextendon;–给表空间重命名–语法:altertablespace旧名称renam…

    2022年7月11日
    24
  • PyCharm激活码永久有效PyCharm2021.2.4激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2021.2.4激活码教程-持续更新,一步到位PyCharm激活码永久有效2021.2.4激活码教程-Windows版永久激活-持续更新,Idea激活码2021.2.4成功激活

    2022年6月19日
    103
  • Ubuntu20.04安装Mysql

    Ubuntu20.04安装MysqlUbuntu20.04安装Mysql1.1下载安装MySQL1.2通过apt安装MySQL服务2.1初始化配置2.2检查mysql服务状态3.1配置远程访问3.2新建数据库和用户3.3mysql服务命令4、数据库操作命令4.1mysql服务操作4.2数据库操作4.3表操作4.4修改表结构4.5数据操作4.6数据的备份与恢复4.7卸载1.1下载安装MySQL在Ubuntu中,默认情况下,只有最新版本的MySQL包含在APT软件包存储库中,要安装它,只需更新服务器上的包索引并安装默认包apt-get

    2022年7月22日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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