mysql数据库中的视图view的概念和详细说明

目录

一、定义

二、视图view的分类

(一)按功能和特性分类

1、普通视图(Regular View/Standard View)

2、索引视图(Indexed View)

3、分割视图(Partitioned View/Distributed Partitioned View)

(二)按其他标准分类

1、只读视图

2、可更新视图

二、视图view的主要优点

(一)简化复杂查询

1、封装查询逻辑

2、提高可维护性

(二)隐藏表结构

1、提高数据安全性

2、定制用户数据

(三)简化权限管理

(四)提高数据独立性

(五)重用查询逻辑

(六)提高查询性能

(七)方便理解和操作

三、创建视图view

(一)基本语法

(二)示例

1、创建视图

2、在navicat中实际操作

3、查询视图语句

4、查询视图结果

五、更新视图view

六、删除视图view


一、定义

        MySQL中的视图(View)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含行和列,但视图不包含在数据库中以存储数据值所占用的物理空间。相反,它包含的是一个SQL语句(称为视图的定义),这个SQL语句从其他表中检索数据,然后可以像表一样进行查询操作。

        通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。视图简单理解如下:

        通过视图,客户端App不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。

二、视图view的分类

        根据不同的分类标准,视图可以分为多种类型。以下是一些常见的分类方式及具体类型:

(一)按功能和特性分类

1、普通视图(Regular View/Standard View)

        也称为标准视图,是最常见的视图类型。它由一个或多个SELECT语句定义,仅包含其定义和被引用表的元数据,并不实际存储数据。当查询视图时,数据库系统会根据视图的定义动态地从基础表中检索数据。

2、索引视图(Indexed View)

        在普通视图的基础上,为视图建立唯一聚集索引,使得视图中的数据物理存储在数据库中。这样,视图就不再仅仅是SELECT语句和表的元数据,而是像表一样拥有了自己的物理存储。索引视图可以显著提高复杂查询的性能,尤其是在数据仓库和决策支持系统中。然而,索引视图也有一些限制,如只能引用基本表,不能包含子查询或某些聚合函数等。

3、分割视图(Partitioned View/Distributed Partitioned View)

        分割视图通常用于在多个数据库或服务器间对数据进行分区。它通过UNION ALL等SQL操作符将多个物理上分布在不同数据库或服务器上的表(称为成员表)连接起来,形成一个逻辑上的完整表。用户可以通过访问这个分割视图来透明地访问所有成员表中的数据,而无需关心数据的物理位置。这种视图在大型分布式系统中特别有用,可以帮助提高数据访问的效率和灵活性。

(二)按其他标准分类

除了上述按功能和特性分类的视图外,还可以根据其他标准对视图进行分类,如:

1、只读视图

        只允许用户通过视图查询数据,不允许更新、删除或插入数据。这通常通过设置适当的权限或使用WITH CHECK OPTION等SQL语法来实现。

2、可更新视图

        允许用户通过视图更新、删除或插入数据。然而,并非所有视图都是可更新的,这取决于视图的定义以及基础表的关系和约束。

二、视图view的主要优点

        视图(View)在数据库管理系统(DBMS)中扮演着重要角色,它并不实际存储数据,而是作为查询结果的逻辑表示。

        视图在数据库管理系统中具有多方面的优点,包括简化复杂查询、隐藏表结构、简化权限管理、提高数据独立性、重用查询逻辑以及提高查询性能等。这些优点使得视图成为数据库设计和应用中不可或缺的一部分。

(一)简化复杂查询

        可以将复杂的查询保存为视图,以后就可以像查询表一样查询视图,从而简化了SQL语句的编写

1、封装查询逻辑

        视图可以将复杂的SQL查询封装起来,使得用户和应用程序能够通过简单的查询语句(如SELECT * FROM view_name)来访问复杂的数据集。这大大降低了直接编写复杂查询语句的难度和出错率。

2、提高可维护性

        当底层表的结构发生变化时,只需调整视图的定义,而不需要修改使用这些视图的应用程序或查询语句,从而提高了数据库的可维护性。

(二)隐藏表结构

1、提高数据安全性

        视图可以隐藏底层表的具体结构,只向用户暴露需要的数据列和行,从而防止用户直接访问敏感数据或执行未授权的操作。

2、定制用户数据

        通过创建不同的视图,可以为不同的用户或角色提供定制化的数据访问权限,实现更细粒度的数据访问控制。

(三)简化权限管理

        集中控制,通过授予用户对视图的访问权限,而不是直接对底层表进行权限控制,可以简化用户权限管理的过程。管理员可以更容易地管理和维护用户的访问权限。

(四)提高数据独立性

        视图可以帮助隔离数据的物理结构变化对用户的影响。当基础表的结构发生变化时(如增加、删除列或修改列名),只要视图的定义保持不变,那么通过视图查询数据的用户就不会受到影响。

        即使需要视图的定义变化,有时候也只要视图的定义相应调整,就可以保持使用视图的应用程序或查询语句的稳定性,从而提高了数据的独立性。

(五)重用查询逻辑

        提高开发效率,视图可以将常用的查询逻辑抽象为视图,以便在多个查询中重用。这不仅可以减少重复编写查询语句的工作量,还可以提高代码的可读性和可维护性。

(六)提高查询性能

        预编译优化,在某些数据库系统中,视图可以被预编译和优化,以提高查询性能。虽然这并非所有数据库系统的普遍特性,但在支持此功能的系统中,视图的使用可以显著提升查询效率。

(七)方便理解和操作

        作为中间层,视图可以作为数据表和用户之间的中间层,简化复杂的查询逻辑和数据关系。对于不熟悉底层表结构的用户来说,视图提供了一个更加直观和易于理解的数据访问接口。

三、创建视图view

(一)基本语法

        在MySQL中,可以使用CREATE VIEW语句来创建视图。基本语法如下:

        CREATE VIEW 视图名称 AS
        SELECT 列名称
        FROM 表名称
        WHERE 条件;

(二)示例

        假设我们有一个employees表,包含id、name、department和salary等列。

1、创建视图

        如果我们想创建一个只包含IT部门员工信息的视图,可以这样做:

CREATE VIEW it_department_employees AS
SELECT employee_id, name, salary
FROM employees
WHERE department_id = 4;

2、在navicat中实际操作

        由图可以看出,操作返回状态成功。

3、查询视图语句

        现在,it_department_employees视图就包含了IT部门所有员工的id、name和salary信息。我们可以像查询表一样查询这个视图:

        SELECT * FROM it_department_employees;

4、查询视图结果

        查询视图结果如下:

        可以看出,非常方便的查到的想要的结果。

五、更新视图view

        虽然视图可以像表一样进行查询,但并非所有视图都可以被更新(即插入、更新或删除数据)。如果视图是从单个表派生而来,并且没有使用聚合函数或分组(GROUP BY)等,那么通常可以更新视图。但是,如果视图涉及多个表或使用了聚合函数等,则可能无法直接更新视图。

        这里就不再举例说明了,有兴趣的可以再沟通。

六、删除视图view

        可以使用DROP VIEW语句来删除视图,例如:

        DROP VIEW IF EXISTS it_department_employees;

        这条语句会检查it_department_employees视图是否存在,如果存在则删除它。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 构建 Web 项目:构建服务器和部署服务器分离, 并且前后端在一起的项目

构建命令 #!/bin/bash cd ruoyi-ui node -v pnpm -v pnpm install pnpm build:prod # 将dist打包成dist.zip zip -r dist.zip dist cp dist.zip ../dist.zip

争议思看科技IPO,创始人妻子郭冬蕾帮助公司“越线”拿补贴?

近日,思看科技(杭州)股份有限公司(下称“思看科技”)更新了第二轮回复问询,针对外界及上交所关注的产品技术先进性、市场空间成长性,以及技术专利权纠纷等问题一一进行了回应。 据此前招股书介…

大屏自适应容器组件 v-scale-screen

在vue中,v-scale-screen可用于大屏项目开发,实现屏幕自适应,可根据宽度自适应,高度自适应,和宽高等比例自适应,全屏自适应。 仓库地址:github国内地址:gitee 一、安装 npm instal…

UDP通讯实现

服务器端&#xff1a; 1.获取套接字 int fd;fdsocket(AF_INET,SOCK_DGRAM,0);if(fd<0){perror("socket");exit(0);} #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); -domain: 指定通信域&…

短信群发精准营销策略全解析

短信群发作为传统而高效的营销手段&#xff0c;其效果却常因缺乏精准性而大打折扣。要实现短信群发的精准营销&#xff0c;关键在于两大核心要素与选择合适的平台。 一、精准营销的两大核心 1.数据细分&#xff0c;精准定位 在启动短信群发前&#xff0c;企业需…

mmdetection中的Spatial-Transform-Decoupling项目部署,debug记录

1.安装环境 在这之前&#xff0c;因为是新的服务器&#xff0c;很多包没有安装 安装conda&#xff0c;在root/anaconda/bin 巴拉巴拉 vim~/bash.rc 按ESC 按&#xff1a;wq 删除是Delete sudo apt install libnccl22.7.8-1cuda11.0 libnccl-dev2.7.8-1cuda11.0bug1&#xff1…

17.分频器设计拓展练习-任意分频通用模块

(1)Verilog代码&#xff1a; module divider_n(clk,reset_n,clk_out);input clk;input reset_n;output clk_out;wire clk_out1;wire clk_out2;wire [9:0]n;wire m;assign n 9;assign m n % 2;divider_even divider_even_inst(.clk(clk),.reset_n(reset_n),.n(n),.en(!m),.cl…

金融科技赋能:加马智能质检系统引领金融机构迈向高效合规新时代

为了保护消费者合法权益、促进市场稳定健康发展&#xff0c;近年来监管机构相继发布了《银行保险机构消费者权益保护管理办法》、《银行业金融机构销售专区录音录像管理暂行规定》、《保险销售行为管理办法》等多项法律法规&#xff0c;对于银行、保险等金融机构的服务、销售行…

使用void 0替代undefined

在很多大厂的规范里面&#xff0c;有这么一条规定&#xff1a;不让直接使用undefined关键字&#xff0c;而应该使用void 0来替代undefined。 一、void 0是什么意思&#xff1f; void是一个关键字&#xff0c;他后面跟的是一个表达式&#xff0c;不管这个表达式算的是啥&#…

Uniapp组件使用的详细步骤

官方文档&#xff1a;uni-app官网 (dcloud.net.cn) 一般用到的组件都在这里&#xff1a; 看介绍里面的注意事项&#xff0c;有注意的地方认真查看&#xff0c;使用的时候例如&#xff0c;以下示例日历&#xff0c;把代码粘贴到你的文件里&#xff0c;然后下载组件 1&#xff…

前端笔记-day13

文章目录 01-体验vw和vh02-vw适配02-适配.htmldemo.lessdemo.css 03-vw和vh不能混用03-vw和vh.htmldemo.lessdemo.css 04-综合案例-酷我demo.htmldemo.lessbase.lessdemo.css 酷我&#xff08;标准版&#xff09;index.htmlindex.lessindex.css 01-体验vw和vh <!DOCTYPE ht…

STM32的 DMA(直接存储器访问) 详解

STM32的DMA&#xff08;Direct Memory Access&#xff0c;直接存储器存取&#xff09;是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM&#xff0c;不需要CPU的干预&#xff0c;从而释放CPU资源&#xff0c;提高CPU工作效率&#xff0c;本文基于STM32F…

【CSS01】CSS概述,使用样式的必要性,CSS语法及选择器

文章目录 一、什么是样式二、使用样式的必要性三、使用样式的几种方式四、CSS基本语法&#xff1a;五、CSS的注释六、CSS选择器——重点相关单词 一、什么是样式 概念&#xff1a; Cascade [kˈskeɪd] Style Sheet [ʃiːt] 级联样式单/表&#xff0c;层叠样式表 CSS有化腐…

【Linux进阶】文件系统2——MBR和GPT

1.磁盘的分区 因为如果你的磁盘被划分成两个分区&#xff0c;那么每个分区的设备文件名是什么&#xff1f; 在了解这个问题之前&#xff0c;我们先来复习一下磁盘的组成&#xff0c;因为现今磁盘的划分与它物理的组成很有关系。 我们谈过磁盘主要由碟片、机械手臂、磁头与主轴马…

安卓应用开发学习:腾讯地图SDK应用改进,实现定位、搜索、路线规划功能集成

一、引言 我的上一篇学习日志《安卓应用开发学习&#xff1a;通过腾讯地图SDK实现定位功能》记录了利用腾讯地图SDK实现手机定位功能&#xff0c;并能获取地图中心点的经纬度信息。这之后的几天里&#xff0c;我对《Android App 开发进阶与项目实战》一书第九章的内容深入解读…

js实现移动蒙版层

移动蒙版层 可在整个页面拖动方块&#xff0c;但方块不能超出页面 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

企业可持续发展新篇章:社会责任管理体系认证的力量与魅力

在当今这个全球化与可持续发展并重的时代&#xff0c;企业已不再仅仅追求经济效益的最大化&#xff0c;而是日益重视其社会角色与责任。随着消费者、投资者及社会各界对企业行为期望的不断提升&#xff0c;社会责任管理体系认证正逐渐成为衡量企业综合竞争力的关键指标之一。这…

代码随想录(day2)双指针法(快慢指针法)

题目&#xff1a; 代码&#xff1a; class Solution(object):def removeElement(self, nums, val):fast0slow0sizelen(nums)while fast<size:if nums[fast]!val:nums[slow]nums[fast]slow1fast1return slow 需要注意的是&#xff0c;只要涉及到使用数组&#xff0c;那么就…

pycharm使用micropython

一、打开设置 2、搜索micropython、安装、重启 3、第5步需要设置成你插的电脑USB口&#xff0c;一个一个试 4、 5、 6、OK

快递柜也上网?你身边的物联网应用

快递柜相信大家都不陌生&#xff0c;如今在各类家庭小区、写字楼、工业园区&#xff0c;各类快递柜已经融入大家的日常&#xff0c;为大家的生活带来便利。大家已经习惯指尖交互就能一键取件&#xff0c;这么便捷的体验背后其实是有一套系统运作机制在支撑的&#xff0c;今天和…