了解 Oracle 中的视图

news2024/12/24 21:12:51

一、概念

视图是基于一个或者多个表上的预定义查询,这些表称为基表,从视图中查询数据的方法与从基表中查询数据的方法相同。视图是一个查看数据的窗口,是查询语句模板,视图本身没有数据,在数据库中只保存了视图的定义。

视图具有以下优点:

1、可以向数据访问者只开放访问视图的权限,屏蔽基表信息。

2、可以将复杂的查询语句保存为视图,简化了SQL语句的编写。

3、创建视图的时候,可以限制只访问基表中的部分列或者部分行的数据,这样可以实现一定的安全性。

4、简化用户权限的管理,只授予用户使用视图的权限。

5、从基表中按一定的业务逻辑抽出用户关心的部分数据创建视图,简化了业务逻辑。

二、创建视图

语法:

create [or replace] [{force|noforce}] view 视图名
as
select查询语句
[with read only];

语法解析:

or replace: 如果视图已经存在,则替换旧视图。

force: 即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

noforce: 如果基表不存在,无法创建视图,该项是默认选项。

with read only: 默认可以通过视图对基表执行增删改操作,with read only强调这是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

示例一:

在超女表中创建一个简单的视图V_GIRL,只提取编号、姓名、身材和颜值字段。

create or replace noforce view V_GIRL
as
select id,name,sc,yz from T_GIRL
with read only;

从V_GIRL视图中查询数据:

在这里插入图片描述

示例二:

连接EMP表和DEPT表创建视图V_EMPDETAIL,隐藏了工资(sal)和备注(comm)字段。

create or replace view V_EMPDETAIL
as
select empno,ename,job,hiredate,EMP.deptno,dname
  from EMP join DEPT on EMP.deptno=DEPT.deptno
with read only;

从V_EMPDETAIL视图中查询数据:

在这里插入图片描述

三、视图的状态

当创建视图后,Oracle会验证视图的有效性,如修改了基本表,可能会导致视图的不可用,数据字典的USER_OBJECTS的status字段中记录了视图的状态(VALID-有效;INVALID-失效)。

在这里插入图片描述
我们来做一个测试。

1)删除T_GIRL表的name字段。

alter table T_GIRL drop column name;

2)执行一次查询视图,出现了错误。

在这里插入图片描述

3)查询视图的状态,成了INVALID。

在这里插入图片描述

4)在T_GIRL表中增加name字段。

alter table T_GIRL drop add name varchar2(30);

5)查询视图的状态,还是INVALID,数据结构已恢复,但视图的状态未恢复。

在这里插入图片描述

6)执行一次查询,视图已恢复正常。

在这里插入图片描述
7)再查询视图的状态,恢复成了VALID。

在这里插入图片描述

在上面的测试中,我们发现基表数据结构的改变导致了视图无效,数据结构恢复后,视图能自动恢复正常(中间有一点曲折)。

四、删除视图

语法:

drop view 视图名

示例:

drop view V_GIRL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计图书管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Unity界面介绍:场景视图

场景视图是创建游戏的主要场所。用户将使用场景视图来选择和定位环境物体,角色物体,摄像机,敌人角色等其它的游戏物体。熟悉和操作场景视图中的物体是创建游戏中的重要步骤。为此,Unity也提供了一些快捷键来提高操作效率。 场景视…

UVM实战笔记(六)

第六章. UVM中的sequence 6.1 sequence基础 6.1.1 从driver中剥离激励产生功能 sequence机制的作用是为了从driver中剥离出产生激励的功能。在不同的测试用例中,将不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时&…

用cocos实现的立方体宣传查看页面

cocos进入3.x时代,我也努力跟进,实现了一个将页面映射到立方体上进行旋转查看的效果。 效果如下: 要点 为了这个效果,我主要实现了3个要点: 将页面准确映射到立方体上面,适配不同尺寸的手机屏幕。对页面…

C++初阶作业 Vector作业详解

作者:小萌新 专栏:C初阶作业 作者简介:大二学生 希望能和大家一起进步 本篇博客介绍:讲解vecotr学校布置的作业 弥补自己不足的知识点 Vector作业详解Vector的特性及使用题目一 迭代器失效编程一 只出现一次的数字编程二 杨辉三角…

aws eks 部署jupyterhub执行kubectl

资料 https://aws.amazon.com/cn/blogs/china/teach-you-how-to-handle-kubeflow-on-eks-2/https://hub.docker.com/r/jupyterhub/singleuser 在部署kubeflow的过程中意识到在jupyter中能够运行外部指令,如果在其中集成一个kubectl,就可以实现命令的重…

【PowerQuery】Excel 自动刷新PowerQuery连接

Excel集成的PowerQuery提供了数据的手动刷新功能之外,也提供了数据的自动刷新功能。需要注意的是,PowerQuery提供的自动刷新功能是针对连接的,也就是说在PowerQuery自动刷新功能不是全局刷新功能,而是针对连接本身提供。接下来我们来看一下如何实现PowerQuery连接的自动刷新…

封装vue插件并发布到npm详细步骤

前言 平常使用Vue开发时,一个项目中多个地方需要用到的相同组件通常我们会封装为一个公共组件,但是如果项目不同我们也需要这个组件,那就需要复制一份公共组件代码到新项目,一个还好,如果是多个组件,这样就…

Design Compiler工具学习笔记(2)

目录 引言 知识储备 设计 objects 库 objects 命令 对象和属性 实际操作 all_* all_inputs all_outputs all_registers 其他 remove_from_collection list 数组 查看环境变量 设置/取消环境变量 引言 本篇继续学习 DC的基本使用。本篇主要学习 design 和 libr…

spring authorization server 0.3.1 - 默认示例

spring authorization server 0.3.1 - 默认oidc开始1、default-authorizationserver项目1.1、AuthorizationServerConfig.java1.2、DefaultSecurityConfig.java1.3、Jwks.java1.4、KeyGeneratorUtils.java1.5、DefaultAuthorizationServer.java1.6、application.yml2、client项…

使用poi操作excel详解

使用poi操作excel详解1、POI工具介绍2、POI可操作的文件类型3、POI所需依赖4、xls和xlsx的区别5、POI Excel 写 03(xls)和07(xlsx)版本方式6、HSSF和XSSF写大文件的区别6.1、使用HSSF写大文件6.2、使用XSSF写大文件6.3、使用SXSS写大文件1、POI工具介绍 1.1、POI 是用Java编写…

为什么进程切换比线程切换代价大,效率低?【TLB:页表缓存/快表】

参考: 计组复习:cache,虚拟内存,页表与TLB小林coding - 为什么要有虚拟内存? 一、为什么进程切换比线程切换代价大,效率更低? 首先,先给出标题的答案(关键在于进程切换…

CleanMyMac X2023最新版安装图文详解

对于刚刚入手苹果Mac设备的用户来说,什么软件好用、怎样设置能够获得最佳的使用体验等这些问题都需要一步一步摸索,但其实,从懵懂到熟练使用OS X系统的过程是非常有趣的。日前,有网友分享了自己认为在OS X系统下非常好用的软件&am…

免费查题接口系统调用

免费查题接口系统调用 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

Spring——Bean注入几种方式(放入容器)

Bean注入几种方式1.XML方式注入set方式注入构造方法注入2.注解方式注入ComponentComponentScanConfigurationBeanComponentScanImport3.实现ImportBeanDefinitionRegistrar接口4.实现FactoryBean5.实现BeanDefinitionRegistryPostProcessor1.XML方式注入 在现在这个Springboot…

jsp课程资源网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程资源网站系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用…

怎么用docker将项目打包成镜像并导出给别人适用 (dockerfile)

前提 你得安装docker,没有安装的可以看看这篇文章 编写dockerfile 这个位置最好和我一样,不然后面打包成镜像可能出问题(找不到jar包) FROM openjdk:8-jdk-slim MAINTAINER JacksonNing COPY /target/iec104-1.0.0-SNAPSHOT.j…

这次把怎么做好一个PPT讲清-演讲篇

《商务演讲与汇报》 一、目标:演讲必须有清晰的目标 演讲:影响他人发生积极的**“改变”** 注意,目标就要设定的影响听众在听完你的演讲后发生积极的改变; 例:5月初向领导做月度工作汇报→→让领导在5月第一周例会…

QGradient(渐变填充)

QGradient(渐变填充) QGradient和QBrush一起使用来指定渐变填充。 Qt支持的填充: 线性渐变(linear gradient),在起点和终点之间插值颜色辐射渐变(radial gradient),在焦点和围绕它的圆的端点之…

2019上半年-2019下半年软件设计师上午题错题总结

2019上半年 30.以下关于极限编程(XP)的最佳实践的叙述中,不正确的是(C )。 A.只处理当前的需求,使设计保持简单 B.编写完程序之后编写测试代码 C.可以按日甚至按小时为客户提供可运行的版本 D.系统最…