详细讲解oracle的视图

news/2025/7/24 7:09:52

视图的定义

视图是从一个或多个表(也可以是其他视图)导出的虚拟表。它本身并不存储实际的数据,实际的数据仍存放在基表中。视图就像是一个窗口,通过它可以查看或处理数据库里的数据。对视图进行查询时,Oracle 会依据视图的定义,从基表中获取所需的数据。

视图的用途

视图在数据库操作中有多种用途,具体如下:

  • 简化复杂查询:当需要频繁使用复杂的连接查询或子查询时,可以将其定义为视图。这样在后续使用时,只需简单地查询该视图即可,无需每次都编写复杂的 SQL 语句。
  • 限制数据访问:通过视图可以只向用户展示他们需要看到的数据,而隐藏基表中的其他敏感列或行。例如,只允许用户查看员工表中的部分字段,如姓名、部门等,而不显示工资等敏感信息。
  • 提供数据逻辑独立性:当基表的结构发生变化时,如列名修改、表结构调整等,只需相应地修改视图的定义,而不需要修改依赖于该视图的应用程序,从而减少了对应用程序的影响。
  • 兼容旧版本应用:在数据库升级或表结构变更时,为了保证旧版本的应用程序能够继续正常运行,可以创建视图来模拟旧表的结构,使旧应用程序可以通过视图继续访问数据。

视图的创建

创建视图的基本语法如下:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(column_alias1, column_alias2, ...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint_name]]
[WITH READ ONLY [CONSTRAINT constraint_name]];

下面对语法中的关键参数进行说明:

  • OR REPLACE:使用这个参数可以替换已存在的视图,这样就不需要先删除原视图再创建新视图。
  • FORCE:即使基表不存在,也能创建视图。不过,在查询该视图时,如果基表仍未创建,就会报错。
  • WITH CHECK OPTION:对视图进行 DML(插入、更新、删除)操作时,会确保操作的数据满足视图定义中的条件。
  • WITH READ ONLY:禁止对视图进行 DML 操作,只能进行查询操作。

下面看几个创建视图的示例:

-- 简单视图示例
CREATE VIEW emp_dept_view AS
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;-- 带条件的视图示例
CREATE VIEW high_salary_employees AS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > 10000;-- 复杂视图示例(包含函数和分组)
CREATE VIEW dept_salary_summary AS
SELECT d.department_name, COUNT(e.employee_id) AS employee_count, AVG(e.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;

视图的查询

查询视图的方式与查询普通表相同,例如:

SELECT * FROM emp_dept_view;
SELECT department_name, avg_salary FROM dept_salary_summary;

视图的更新

对于简单视图,通常可以进行 DML 操作(插入、更新、删除),但需要满足一定的条件:

  • 视图定义中不能包含 GROUP BY、DISTINCT、聚合函数等。
  • 如果视图定义中包含基表的 NOT NULL 列,那么在插入数据时必须为这些列提供值。
  • 如果使用了 WITH CHECK OPTION,那么 DML 操作不能违反视图定义中的条件。

不过,复杂视图一般不支持 DML 操作。例如,包含聚合函数、GROUP BY 子句或连接多个表的视图通常是不可更新的。

视图的修改和删除

  • 修改视图:可以使用 CREATE OR REPLACE VIEW 语句来修改已存在视图的定义。
  • 删除视图:使用 DROP VIEW 语句删除视图,语法如下:
DROP VIEW view_name;

需要注意的是,删除视图不会影响基表的数据。

视图的限制和注意事项

在使用视图时,有一些限制和注意事项需要了解:

  • 视图的性能取决于基表的结构和查询复杂度。如果基表数据量很大,或者视图定义中的查询很复杂,可能会影响查询性能。
  • 复杂视图(如包含聚合函数或 GROUP BY 的视图)通常不支持 DML 操作。
  • 视图的定义会被存储在数据字典中(如 USER_VIEWS、ALL_VIEWS、DBA_VIEWS),可以通过查询这些数据字典来查看视图的定义信息。
  • 在使用 FORCE 选项创建视图时要谨慎,因为这样可能会创建出无效的视图。

通过合理使用视图,可以提高数据库的安全性、简化查询操作,并增强数据的逻辑独立性。

文章来源:https://blog.csdn.net/2301_76971522/article/details/148903068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-5546063.html

相关文章

Git常用操作详解

Git常用操作详解 初始化与配置 在项目目录下执行git init初始化一个新的Git仓库。配置用户信息使用以下命令: git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"查看当前配置使用git conf…

Continue索引实现机制

Continue索引实现机制 Continue是一个开源的AI代码助手,本文介绍Continue索引的实现机制。 Continue采用标签系统与内容寻址相结合的方式,确保无需重复索引。当您切换分支时,Continue仅会重新索引新修改且未被缓存的文件。通过实现Codebase…

Azure 自动化:所需状态配置 (DSC)

PowerShell 是一款面向 Windows 系统管理员的任务导向型 Shell 和脚本解决方案。但 PowerShell DSC 扩展了这一理念,并提供了一种声明式语法,即使对要部署的特定 IT 资源一无所知,也能配置并维护该 IT 资源的特定状态,即使他们从技术角度不知道如何实现该目标。 PowerShel…

FPGA基础 -- Verilog 格雷码(Gray Code)计数器设计与原理解析

格雷码(Gray Code)计数器设计与原理解析 一、格雷码简介 格雷码(Gray Code)又称为反射二进制码(Reflected Binary Code,简称RBC),是一种编码方式,其特点是在连续递增或…

【Spring AOP 】从 login 流程理解面向切面编程

一、引入场景:从登录流程谈起 在我们的日常开发中,登录流程往往是这样一个经典的业务流程: 用户输入用户名与密码; 后端查询数据库; 判断用户名和密码是否匹配; 匹配成功进入主页面,失败则返…

【GStreamer】减小延时的参数设置、从RTP中获取时间戳

1、问题描述 在使用 GStreamer 实现 RTSP 转 RTMP 时,延时很大,2~5秒,这是为了应对网络抖动、丢包重传、音视频同步等问题,建立了一些缓冲区。 2、解决方法 在可以损失流畅度、画面质量的前提下,可以使用如下参数来减小延时 1)rtspsrc 参数: buffer-mode=auto:自动…

智慧校园电子班牌系统源码的开发与应用,基于Java/SpringBoot后端、Vue2前端、MySQL5.7数据库

智慧校园系统源码,智慧班牌源码,java语言 技术栈: ‌后端开发‌:采用Java语言和Spring Boot框架进行开发。Java是一种广泛使用的、面向对象的编程语言,而Spring Boot是基于Spring框架的快速应用开发框架,能…

我手动从go官网下载了go1.16.15linux安装包,我该如何做,才能使得vscode仍能通过右下角来管理这个go版本

如果你已经手动下载了 Go 1.16.15 的 Linux 安装包(如 go1.16.15.linux-amd64.tar.gz),但仍然希望 VS Code 能通过右下角版本选择器管理它,可以按照以下步骤操作: 手动安装 Go 1.16.15 (1) 解压到 ~/sdk/ 目录&#…

盖雅工场 2025 香港 SAP NOW 大会深度解析:AI 重构亚太劳动力管理数字化生态

一、前沿技术亮相:AI 驱动人力资源数字化转型全景展示 在 6 月 13 日举办的 2025 香港 SAP NOW 大会上,亚太劳动力管理领军企业盖雅工场(GaiaWorks)以「AI 劳动力管理」为核心,通过主题演讲与沉浸式展台演示&#xf…

【音视频】RTMP协议推流抓包分析

一、RTMP基本原理 RTMP(Real Time Messaging Protocol)是专为实时流媒体传输设计的应用层协议,核心目标是在客户端与服务器间高效传输音视频数据 1.1 基于TCP的可靠连接 RTMP建立在TCP协议之上,利用TCP的可靠传输特性&#xff…