文档章节

Oracle 中的视图理解

狂奔啦蜗牛
 狂奔啦蜗牛
发布于 2012/08/24 15:46
字数 1279
阅读 187
收藏 5

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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 触发器对其数据进行修改。

© 著作权归作者所有

狂奔啦蜗牛
粉丝 8
博文 17
码字总数 15025
作品 0
西安
程序员
私信 提问
ORACLE sid,pid,spid总结

概念上: 1.spid (system process id) 是操作系统层面的进程id . 2.pid(process id) 这个是基于oracle的进程id个人理解为就是oracle给自己的进程的一个编号。 3.sid.(这个就是session 的id)...

技术小美
2017/11/12
0
0
在Oracle专家眼中,MySQL sys Schema是怎样一种存在?

作者介绍 MySQL的数据字典经历了几个阶段的演进,MySQL4.1 提供了information_schema 数据字典,一些基础元数据可以通过SQL来查询得到。 MySQL5.5 提供了performanceschema 性能引擎,可以通...

杨建荣
2016/12/30
0
0
SQL Hint都无法解救DB性能时,如何通过视图曲线救国?

作者介绍 这个案例的主体是视图,在总结这个案例的时候,我想起了在一次以DB性能为主题的讨论会上,当谈及到视图对性能的影响的时候,主持人抛出一个问题:在数据里面,是不是视图越少性能越...

黄浩
2016/12/01
0
0
Oracle与MySQL的几点区别

摘要:Oracle数据库与MySQL数据库的区别是本文我们主要要介绍的内容,接下来我们就开始介绍这部分内容,希望能够对您有所帮助。 Oracle与MySQL的区别: 1.在Oracle中用select from all_users...

可淘淘
2011/12/14
130
2
在线Oracle ER模型制作

概述 ER模型使用可视化了实体存储的信息,以及直观的呈现了实体与实体的关系,在我们实际的应用系统开发过程中新建ER模型可以更好的理解业务模型,为以后的开发维护工作起到归纳总结的作用。...

349767068q
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端入门到实战:图解原生dialog标签(非常详细)

在html5中,新增了很多语义化的标签。如footer、header之类的,今天的主角是dialog标签 顾名思义,就是用来定义对话框的。目前只有Chrome和Safari支持该标签,所以用的不多,不过确实挺好用的...

梦想编程
27分钟前
4
0
一些php常用函数积累

本文链接<?php// id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path;$log_path = "test_php.txt";// 是否先log到buffer,再通过CT_flush()一次性写入文件$......

一字见心
28分钟前
4
0
IntelliJ idea中 注释代码折叠

visual studio中有#region 可以折叠代码,IntelliJ idea 中也有类似功能 //region 描述代码//endregion

format
28分钟前
5
0
oracle表中更改主键

一、数据表有主键但无主键约束名 先删除之前的主键,后添加主键 ,执行SQL: a. alter table 表名 drop primary key; b. alter table 表名 add primary key(想要更改的字段名称); 二、数据表...

_Somuns
30分钟前
4
0
jQuery AJAX提交表单

我有一个名称为orderproductForm的表单,输入的数量不确定。 我想做某种jQuery.get或ajax或类似的事情,它将通过Ajax调用页面,并发送所有形式为orderproductForm的输入。 我想一种方法是做类...

技术盛宴
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部