首页 > 其他分享 >【鱼授之以渔】如何创建和使用视图?

【鱼授之以渔】如何创建和使用视图?

时间:2023-12-28 14:35:33浏览次数:49  
标签:+----------------------+ 创建 数据库 视图 查询 执行 鱼授


鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)

【鱼授之以渔】如何创建和使用视图?_数据库

视图(View)是数据库中的一个虚拟表,它由一个查询定义,并且视图的结果集是根据查询的结果动态生成的。视图可以被视为存储在数据库中的预定义查询,它可以简化复杂的查询操作,提供数据的逻辑组织和安全性控制。

视图的创建和使用流程如下:

  1. 创建视图:使用CREATE VIEW语句创建视图,并指定视图的名称和定义。视图的定义是一个查询语句,用于指定视图的数据来源和过滤条件。
  2. 存储视图:创建视图后,视图的定义会被存储在数据库中,但不会立即执行查询。
  3. 使用视图:当需要使用视图时,可以像使用普通表一样查询视图。当查询视图时,数据库会根据视图的定义执行查询操作,并返回结果集。

下面是一个示例,展示了如何创建和使用一个简单的视图:

-- 创建视图
CREATE VIEW high_sales_customers AS
SELECT customer_name, total_sales
FROM customers
WHERE total_sales > 100000;

-- 使用视图
SELECT * FROM high_sales_customers;

在这个例子中,我们创建了一个名为high_sales_customers的视图,它从customers表中选择销售额超过100,000的客户信息。然后我们可以像查询普通表一样查询这个视图,获取满足条件的客户信息。

视图的使用场景包括:

  1. 简化复杂查询:视图可以将复杂的查询操作封装为一个简单的视图,提供更易读和易用的接口。
  2. 数据逻辑组织:视图可以将相关的数据进行逻辑组织,提供更清晰和结构化的数据视图。
  3. 安全性控制:通过视图,可以限制用户对数据的访问权限,只提供需要的数据,保护敏感信息。

关于视图的更多细节和用法,您可以参考以下文献材料:

  1. MySQL视图教程 ↗
  2. PostgreSQL视图文档 ↗
  3. Oracle视图文档 ↗

视图被广泛应用于关系型数据库中,几乎所有主流的数据库产品都支持视图功能,包括MySQL、PostgreSQL、Oracle、SQL Server等。这些数据库产品在各种应用场景中使用视图来简化查询、提供数据逻辑组织和实现安全性控制。

创建和使用视图的过程涉及数据库管理系统(DBMS)的内部架构和处理流程。下面是一个简化的底层架构流程图,说明了视图的创建和使用过程:

+----------------------+
|        用户           |
+----------------------+
         |
         V
+----------------------+
|    查询解析器        |
+----------------------+
         |
         V
+----------------------+
|   查询优化器         |
+----------------------+
         |
         V
+----------------------+
|    查询执行引擎      |
+----------------------+
         |
         V
+----------------------+
|        视图          |
|      定义存储        |
+----------------------+
         |
         V
+----------------------+
|    查询执行引擎      |
+----------------------+
         |
         V
+----------------------+
|      结果返回         |
+----------------------+
         |
         V
+----------------------+
|        用户           |
+----------------------+

详细解释每个步骤:

  1. 用户:用户通过SQL语句向数据库发出查询请求。
  2. 查询解析器:查询解析器负责解析和验证SQL语句的语法和语义,并将其转换为内部的查询表示形式。
  3. 查询优化器:查询优化器分析查询的结构和条件,选择最优的执行计划和访问路径,以提高查询性能。
  4. 查询执行引擎:查询执行引擎根据优化器生成的执行计划,执行实际的查询操作。这包括从存储介质中检索数据、应用过滤条件、执行聚合等操作。
  5. 视图定义存储:在视图创建阶段,视图的定义被存储在数据库中,通常存储在系统目录表中或其他元数据存储中。
  6. 查询执行引擎(视图):当用户查询视图时,查询执行引擎会检索存储的视图定义,并将其作为子查询或替换原始查询中的视图引用。
  7. 结果返回:查询执行引擎生成结果集,将其返回给用户。

这个流程图简要概括了视图的创建和使用过程,其中的查询解析器、查询优化器和查询执行引擎是DBMS的核心组件,负责处理查询请求并执行查询操作。

底层的DBMS架构和流程可以因不同的数据库产品而异,上述流程图是一个概括性的描述,并非所有DBMS都完全按照该流程执行。具体的实现细节和优化策略可能因DBMS的不同而有所差异。

关于DBMS的内部架构和查询处理流程,您可以参考以下文献材料:

  1. Database Systems: The Complete Book ↗ by Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom.
  2. Database System Concepts ↗ by Abraham Silberschatz, Henry F. Korth, S. Sudarshan.
  3. Database Management Systems ↗ course slides by Dr. Alin Dobra, University of Florida.

标签:+----------------------+,创建,数据库,视图,查询,执行,鱼授
From: https://blog.51cto.com/chenfenglove/9014757

相关文章

  • 【SpringBoot零基础入门到项目实战②】安装Java和Maven,创建你的第一个项目
    文章目录导言安装JavaWindows系统macOS系统Linux系统安装和配置MavenWindows系统macOS系统Linux系统配置Maven本地仓库使用阿里镜像加速创建第一个SpringBoot项目拓展学习(提前了解后面会讲到)1.深入理解SpringBoot的项目结构2.学习SpringBoot的自动配置3.掌握SpringBoot......
  • WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理
    WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理开发人员社区,以及以可扩展的方式保护和路由API流量¹。它利用来自WSO2平台的成熟组件来保护,集成和管理API¹。此外,它还与WSO2分析平台集成,提供现成的报告和警报,让您即时了解API行为¹。WSO2API......
  • 使用命令行创建vue3+Typescript的uni-app
    目录创建项目扩展组件uni-ui安装配置easycom安装pinia报vue.hasInjectionContextisnotafunction更具该文档创建好的模板:GitHub仓库地址,克隆下来安装依赖即可创建项目官方文档--创建uni-app以创建vue3+Typescript工程为例,使用下列命令行:#网络不好的话会创建失败,可以前往......
  • Builder 生成器模式简介与 C# 示例【创建型2】【设计模式来了_2】
    Builder生成器模式简介与C#示例【创建型2】【设计模式来了_2】 阅读目录〇、简介1、什么是生成器模式?2、优缺点和使用场景一、简单的示例代码二、生成器模式结构三、在.Net框架中的实际应用四、相关模式回到顶部〇、简介1、什么是生成器模式?一句话......
  • 记录一次 OpenStack 集群在创建虚机后无法获取 IP 的问题
    现象所有的组件状态都是正常工作的,DHCP服务正常工作,在个个虚拟网络设备端口抓包,发现OpenVSwitch上DHCP包可以通行,虚机获取DHCPDiscover请求可以正常发出,但是无法收到回包。抓包命令tcpdump-ieth0udpport67orport68-vvv抓包点网络节点上对应的网络空间的的......
  • mdadm 创建软raid5
    在开始操作之前,需要提醒您,操作RAID数组和磁盘分区是一个风险较高的操作,可能会导致数据丢失。在进行此类操作前,请务必备份所有重要数据。要使用mdadm命令在/dev/sda至/dev/sde这五块硬盘上创建一个RAID5阵列,您需要先清除这些硬盘上的分区信息。以下是操作步骤:1.备份......
  • mybatis在读取配置文件,创建SqlSessionFactory对象时。需要对密码进行解密,再连接数据库
    1、我看了网上很多的方法,主要是说通过新建一个jdbc.properties来获取数据库连接池。但是我试了并没有作用。 2、解决办法:简单粗暴。先用后代码读取原有的mybatis-configuration.xml,然后将密码进行解密后,设值到xml中。最后把解密的xml作为源。去生成一份新的xml文件,把心的xml......
  • Jenkins服务器上创建项目和配置
    大体步骤:General(基础配置)--》源码管理--》构建触发器--》构建环境--》构建--》构建后操作1.创建一个工程2.General(基础配置)仅需填写标准部分,其他可不填写3.源码管理 上图中点击“添加”按钮添加一组账号和密码4.构建触发器 如上图:当前项目的回调地址为:htt......
  • golang 项目开发如何创建 Module
    golang项目开发如何创建Module原创 demo007x 知识派 2023-12-2208:30 发表于北京 听全文golang项目开发如何创建Moduleimg为什么要创建一个 Module?我们日常开发程序的时候都会引入第三方的 package,使用第三方的package的好处是我们可以快速的开发我们的......
  • 无涯教程-Java加密 - 创建签名
    数字签名使无涯教程可以验证签名的作者,日期和时间,并对邮件内容进行身份验证。它还包括用于其他功能的身份验证功能。创建数字签名现在学习如何创建数字签名。您可以按照以下步骤使用Java创建数字签名。步骤1-创建KeyPairGenerator对象KeyPairGenerator类提供getInstan......