Oracle---视图

news2025/5/21 19:07:09

Oracle之视图和物化视图


文章目录

  • Oracle之视图和物化视图
  • 视图
    • 优点
    • 创建视图
      • 带检查约束视图
      • 只读视图
      • 创建带错误的视图
    • 删除视图
    • 查询视图
  • 物化视图(实体化视图)
    • 区别和优点
    • 创建物化视图
      • 创建手动刷新的物化视图
        • 执行下列语句刷新
      • 创建自动刷新的物化视图
      • 创建时不生成数据的物化视图
      • 创建增量刷新的物化视图
    • 删除物化视图


视图

视图是一种数据库对象,是从一个或者多个数据库表或视图中导出的虚表,视图所对应的数据并不真正地存储在视图中,而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。
简单来说,就是对sql语句的封装


优点

1.简化数据操作:视图可以简化用户处理数据的方式

2.着重于特定数据:不必要的数据或敏感数据可以不出现在试图中

3.视图提供了一个简单而有效的安全机制,可以制定不同用户对数据的访问权限

4.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口

创建视图

CREATE [OR REPLACE] [FORCE] VIEW  view_name
AS sebquery
[WITH CHECK OPTION]
[WITH READ ONLY]
OR REPLACE:若所创建的视图已经存在,oracle自动重建该视图
FORCE:不管基表是否存在oracle都会自动创建该视图
sebquery:一条完整的select语句,可以再该语句中定义别名
WITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束
WITH READ ONLY:该视图上不能进行任何DML操作

带检查约束视图

该视图可以查看,但插入或修改必须满足视图的约束

CREATE  VIEW  view_name
AS sebquery
WITH CHECK OPTION;

这里有个teacher表
在这里插入图片描述

# 创建约束视图
create or replace  view t_view
as select * from teacher where name='zs'
with check option ;

查看视图
在这里插入图片描述

若修改视图中 id 为41的名字,则会报错(不能修改视图的条件值)

update t_view set name='zss' where id=41;

在这里插入图片描述

只读视图

只能查看,不能修改

CREATE VIEW  view_name
AS sebquery
WITH READ ONLY;

创建带错误的视图

使用场景:当表动态创建时

若表不存在,但是希望创建视图,则添加可选项FORCE

CREATE FORCE VIEW  view_name
AS sebquery

删除视图

DROP VIEW view_name

查询视图

select * from view_name

就像使用表一样去使用视图就可以了,对于简单的视图,我们不仅可以用查询,还可以增删改记录

物化视图(实体化视图)

视图是一个虚拟表(也可以认为是一条语句),它基于创建时指定的查询语句返回的结果集,每次访问它都会导致这个查询语句被执行一次,为了避免每次访问都执行这个查询,可以将这个查询结果存储到一个物化视图(也叫实体化视图)

区别和优点

区别:是普通视图建立的副本,类似于一张表,需要占用存储空间。

优点:对物化视图查询的执行效率与查询一个表是一样的。

创建物化视图

CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED]
REFRESH [FAST|COMPLETE|FORCE]
[ON [COMMIT| DEMAND]| START WITH(start_time) NEXT(next_time)]
AS
subquery

BUILD IMMEDIATE:是在创建物化视图的时候就生成数据
BUILD DEFERRED:则在创建时不生成数据,以后根据需要再生成数据。
默认为:BUILD IMMEDIATE。

刷新(REFRESH):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。

REFRESH后跟着指定的刷新方法有三种:FAST、COMPLETE、FORCE。

FAST:刷新采用增量刷新(快速刷新),只刷新自上次刷新以后进行的修改。
COMPLETE:刷新对整个物化视图进行完全的刷新。
FORCE:则Oracle在刷新时会去判断是否可以进行快速刷新。
FORCE是默认的方式。

刷新的模式有两种:ON DEMAND和ON COMMIT。

ON DEMAND:指需要手动刷新物化视图(默认)。
ON COMMIT:指在基表发生COMMIT操作时自动刷新。

创建手动刷新的物化视图

--创建手动刷新的物化视图
create materialized view view_emp
as
    select emp.id,emp.name,dept.pname from emp,dept
    where emp.pid=dept.pid;

直接形成表
在这里插入图片描述
在这里插入图片描述

执行下列语句刷新

C指的是COMPLETE的首字母,代表完全刷新
begin
DBMS_MVIEW.refresh(‘view_emp’,‘C’);
end;

--查询物化视图
select * from view_emp;
--向基表插入数据
insert into emp values (8,'lhh',2);

--执行下列语句刷新
begin
    DBMS_MVIEW.refresh('view_emp','C');
end;

在这里插入图片描述

或者在命令窗口下

SQL> EXEC DBMS_MVIEW.refresh('view_emp','C');

创建自动刷新的物化视图

基表发生commit操作,自动刷新物化视图

--创建自动刷新的物化视图
create materialized view view_emp1
refresh
on commit
as
    select emp.id,emp.name,dept.pname from emp,dept
    where emp.pid=dept.pid;

--向基表插入数据
insert into emp values (8,'lhh',2);

在这里插入图片描述

创建时不生成数据的物化视图

--创建时不生成数据的物化视图
create materialized view view_emp2
build deferred
    refresh
    on commit
as
    select emp.id,emp.name,dept.pname from emp,dept
    where emp.pid=dept.pid;
--查询物化视图    
select * from view_emp2;

在这里插入图片描述
第一次必须手动刷新

--执行下列语句刷新
begin
    DBMS_MVIEW.refresh('view_emp2','C');
end;
--查询物化视图    
select * from view_emp2;

在这里插入图片描述

创建增量刷新的物化视图

前提是必须创建物化日志
物化日志:记录基表发生了哪些变化,用这些记录去更新物化视图

有关联几个表创建几个日志

--创建物化视图日志
--根据主键创建
create materialized view log on emp with rowid ;
create materialized view log on dept with rowid;

创建物化视图的语句中,必须有基表的rowid

--创建增量刷新的物化视图
create materialized view view_emp3
    refresh
    fast
as
    select emp.rowid erowid,dept.rowid drowid,emp.id,emp.name,dept.pname from emp,dept
    where emp.pid=dept.pid;

当基表插入数值后,物化视图日志内容
在这里插入图片描述

SNAPTIME$$:用于表示刷新时间。
DMLTYPE$$:用于表示DML操作类型,I表示:INSERT,D表示:DELETE,U表示:UPDATE。
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。
此列是RAW类型,其实Oracle采用的方式就是用每个BIT位去映射一个列。
插入操作显示为:FE,
删除显示为:OO
更新操作则根据更新字段的位置而显示不同的值。

当我们手动刷新物化视图后,物化视图日志被清空,物化视图更新。

删除物化视图

DROP METERIALIZED VIEW view_name

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

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

相关文章

Java日志框架简介

一、java日志发展线路图 上面涵盖了java世界里主要的日志框架或门面 二、日志门面和框架的区别 日志框架技术 JUL、Logback、Log4j、Log4j2 用来方便有效地记录日志信息 日志门面技术 JCL、SLF4j 为什么要使用日志门面技术: 每一种日志框架都有自己单独的API&am…

[附源码]Python计算机毕业设计高校学生管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

自学一个月pyhon找到工作,半年成为多个平台关注破万的小作者

前言 干货来了,浓缩了我学习python的所有学习经历,从中获取到的经验分享给你,如果你看了没用,那让我打你一拳。 大学 高中的我,考了三次高考才勉强考上一个二本大学一本数学专业,你没听错,三…

基于C语言实现(控制台)学生成绩管理系统【100010051】

学生成绩管理系统 说明: 注册密码:2014052421程序包含中文和特殊字符,在 Window 下需 ASCII 编码,不能 UTF-8 编码。程序对三个文件要求是文本文件,且 studata.txt 中包含中文字符,在 window 下也需要 AS…

全网惟一面向软件测试人员的Python基础教程-在Python中如何优雅的切西瓜呢?

全网惟一面向软件测试人员的Python基础教程 起点:《python软件测试实战宝典》介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你知道Python代码是怎样运行的吗? 第四章 Python数据类型中有那些故事呢?…

第03讲:Security之用户鉴权

一、创建项目 参考:浅试Security 二、实现用户鉴权 何为鉴权?说白了其实就是用户认证,用户输入用户名和密码,只有认证通过了才能使用我的系统。 在实际的项目开发中,账号和密码都是从数据库中查询出来的。所…

820爆炸案(模拟案件)

文章目录模拟案件背景相关密码快压word邮箱BitLocker系统证书bestcrypt涉案图片模拟案件背景 8月20日18:00某市汽车站发生一起爆炸案件,经初步侦查,炸弹系通过手机远程引爆,办案人员经过综合研判分析,确定了引爆炸弹的…

在Mac电脑上怎么修改移动硬盘的读写权限?怎样修改mac电脑中移动硬盘的权限

在Mac电脑上怎么修改移动硬盘的读写权限?你是否遇到过把外部硬盘连接到Mac电脑后,外部硬盘只能读取不能写入的问题?大部分的情况是因为硬盘格式可能是Windows系统的格式,导致在mac电脑上只能读取不能写入。那我们要怎么才能正常的…

腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!

前言: 可以毫不夸张地说,这篇文章介绍的 SpringBoot 教程基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个springboot的用法,文中都会都会有详细的教程解释。 本文总共从29个章节,248页PDF,阐述springboot在各种环境下的…

计算机毕设Python+Vue校园心理咨询平台(程序+LW+部署)

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

Servlet应用(Request+response对象)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

测试架构师需要具备哪些能力?

目录 前言 为什么软件项目需要架构设计? 测试架构师需要解决什么问题? 测试架构师需要具备哪些能力? 测试工程师如何培养架构能力? 总结 重点:配套学习资料和视频教学 前言 相比于我们常见的研发架构师&#x…

微信机器人的构建与使用

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2022.12.15 Last edited: 2022.12.15 目录 《微信机器人》程序使用说明 微信机器人使用说明 1.项目说明 2. 系统环境 3.准备条…

Java+MySQL基于SSH的扶贫信息管理系统 开题 毕业设计

扶贫信息管理系统采用了B/S(浏览器/服务器)体系结构,JAVA作为开发语言,MySQL作为数据存储进行开发,Tomcat作为WEB服务器,开发平台windows,开发工具采用比elicpse更好用的myeclipse。系统角色分为用户和管理员,主要模块有:县管理模块、贫困户管理模块、扶贫文件管理模…

B站试用期刚过,被HR和大老板一起谈话,说我工作没任何问题,但今晚必须走人!...

最近B站的裁员消息大家关注了吗?一位B站的新员工哭诉:试用期刚过,就被HR和大老板一起谈话,说他工作态度、工作能力、工作产出都没有任何问题,但必须在12.16号走人!他不接受,争辩了很久&#xff…

鉴源论坛 · 观模丨AUTOSAR调度表可调度性的形式化分析

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 汽车上大量软件和电子控制单元(ECU,Electronic Control Unit)的使用导致了汽车电子架构变得更为复杂,现如今从工厂生产的汽车更像是带轮子的电脑。现代汽车由大约50到…

Java+MySQL基于ssm的物理竞赛管理系统 开题 论文

物理竞赛是对课堂上所学的理论知识的实践运用,加深所学知识的理解,锻炼团队协作能力。学生可以根据个人爱好,个人特长选择参与,不仅能培养学生的创新意思、提高专业技能,还能锻炼学生的组织能力和协作能力。物理竞赛是在中国科协的领导下,由中国物理学会主办,各省、自治区、直辖…

windows11-IIS和nginx部署 vue3项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 IIS部署vue3项目一、IIS 安装二、解决404问题三、windows环境下安装/使用 nginx提示:以下是本篇文章正文内容,下面案例可供参考 一、IIS 安装 https…

Ac-Nle-P-Nle-D-AMC

Ac-nLPnLD-AMC, substrate for proteasome.Ac-nLPnLD-AMC,蛋白酶体底物。 编号: 185966中文名称: 蛋白酶体底物:Ac-Nle-Pro-Nle-Asp-7-氨基-4-甲基香豆素CAS号: 355140-49-7单字母: Ac-Nle-P-Nle-D-AMC三字母: Ac-Nle-Pro-Nle-Asp-AMC氨基酸个数: 4分子式…

高压放大器怎么选择型号的(高压放大器选型标准规范最新版)

高压放大器一般是指能够产生最大功率输出以驱动特定负载的装置,这是电子测量行业比较常见的一种仪器,可以对信号源的电压信号进行放大。 ATA-2000系列电压放大器选型指南: 高压放大器特点介绍: 1、可以输出1W以上更大的功率。 2、…