mysql视图

2023-11-20

一、什么是视图

        视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由其定义结果组成的表;

 

例子:定一班级表class(ID,name) 学生表 student(id,class_id,name);

当数据表结构很复杂,但我们只关心其中一部分数据的时候就可以使用视图,定义关心的数据

创建视图:

                 create view v_stu as select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id

查询视图 v_stu

                 select * from v_stu

                

c_name stu_name
wu 一班
li 二班

 

二、为什么使用视图

1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到

了一个特性:grant语句可以针对视图进行授予权限。
2.查询性能提高。

3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少修改的效果。

这是在实际开发中比较有用的


例子:假如因为某种需要,a表与b表需要进行合并起来组成一个新的表c。最后a表与b表都不会存在了。而由于原来程序中编

写sql分别是基于a表与b表查询的,这就意味着需要重新编写大量的sql(改成向c表去操作数据)。而通过视图就可以做到不修

改。定义两个视图名字还是原来的表名a和b。a、b视图完成从c表中取出内容。

说明:使用这样的解决方式,基于对视图的细节了解越详细越好。因为使用视图还是与使用表的语法上没区别。比如视图名a
,那么查询还是"select * from a"。

4.复杂的查询需求。可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。

 

视图的工作机制:当调用视图的时候,才会执行视图中的sql,进行取数据操作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容是一致的。视图这样设计有什么好处?节省空间,内容是总是一致的话,那么我们不需要维护视图的内容,维护好真实表的内容,就可以保证视图的完整性了。

三、视图的执行方式

   视图中是没有保存真实的数据的,只是引用了真实表中的数据,其引用的数据有其定义决定,当我们进行查询视图其实是从定义中取数据;

  MySQL 中会有infomation_schema 这么一个数据库,它是mysql自带的一个数据库,存储mysql数据库的一些元数据,所谓的元数据是指的是mysql的表信息。视图信息、列信息等。简单的说就相当于mysql数据库的一个目录。所有的视图在views 表中都有存储说明;从这里我们可以看出mysql 的工作机制;

     select * from v_stu ;

v_stu也可以是一个表名,由于视图和表的物理结构不同,表中可以查出真实的数据,而视图需要查找到是定义,从而得到需要的数据,我们怎么知道v_stu是一个视图呢?是因为有一个查看目录的例程在做这件事。

 

视图机制:

     视图处理有两种机制,替换式和具化式;

     替换式:操作视图时,视图名直接被视图定义给替换掉,结果就变成select * from (select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id),在提交给mysql执行;

    具化式:mysql先得到了视图执行的结果,该结果形成一个中间结果暂时存在内存中。之后,外面的select语句就调用了这些中间结果(临时表)。

 

看起来都是要得到结果,形式上有区别,好像没体会到本质上的区别。两种方式又有什么样的不同呢?

替换方式,将视图公式替换后,当成一个整体sql进行处理了。具体化方式,先处理视图结果,后处理外面的查询需求。
替换方式可以总结为,先准备,后执行。
具体化方式总结理解为,分开处理。

哪种方式好?不知道。mysql会自己确定使用哪种方式进行处理的。自己在定义视图的时候也可以指定使用何种方式。

例子:

  语法:CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
       VIEW 视图名 [(属性清单)]
       AS SELECT 语句
       [WITH [CASCADED|LOCAL] CHECK OPTION];

ALGORITHM有三个参数分别是:merge、TEMPTABLE、UNDEFINED

 

merge:处理方式替换式,可以进行更新真实表中的数据;

TEMPTABLE:具化式,由于数据存储在临时表中,所以不可以进行更新操作!

当你的参数定义是UNDEFINED(没有定义ALGORITHM参数)。mysql更倾向于选择替换方式。是因为它更加有效。

例子:

   create ALGORITHM=merge view v_stu as select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id


update v_stu set c_name = '' where c_name ='';

执行成功

create ALGORITHM=TEMPTABLEview v_stu as select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id

执行失败,不可以更新!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql视图 的相关文章

  • 【文件I/O】(一)标准I/O

    标准I O 库函数 一 I O相关知识 1 1最早接触的I O 1 2I O的种类 1 3库函数和系统调用 1 4什么是FILE 二 标准I O函数 1 fopen fclose strerror perror 打开 关闭文件 输出错误码信
  • 2022年网络安全比赛--数据库服务渗透测试中职组(超详细)

    2022年数据库服务渗透测试解析 一 竞赛时间 180分钟 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1 通过分析靶机Server01页面信息 寻找漏洞页面 将WEB服务存在SQL注入漏洞的页面名称作为Flag

随机推荐

  • 电脑提示vcomp100.dll丢失错误怎么办?(多种修复方法介绍)

    vcomp100 dll是由 Microsoft 开发的动态链接库 DLL 它是几个基于图形的应用程序 例如 Photoshop 以及多个游戏 例如巫师 3 所必需的 vcomp100 dll的作用包括 提供多线程支持 vcomp100 d
  • logback日志在项目启动后立刻清理历史日志

    扣扣技术分享交流群 1125844267 背景 搭了一个maven项目 只有一个main方法 然后打成一个jar包以供别的程序去启动执行 项目中配置了logback日志策略 但是在生产环境下发现日志可以正常生成 但是没有删除历史日志 设置的
  • 最全面、最详细web前端面试题及答案总结

    最全面 最详细web前端面试题及答案总结 总结不易 希望可以帮助到即将面试或还在学习中的web前端小伙伴 祝面试顺利 拿高薪 本章是HTML考点的 重难点 因此我们采 简略回答的 式进 撰写 所以不会有太多详细的解释 我们约定 每个问题后我
  • STM32外部EXTI中断笔记(开始于2021-07-13)

    STM32外部EXTI中断笔记 1 EXTI简介 在STM32上外部中断线共有19个 互联型 其上每个GPIO都可作外部中断输入 供GPIO的外部中断线供有16个 EXTI Line x x 0 15 stm32只分配7个中断向量给这16个
  • beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

    写在前面的话 1 为什么我要叫伪部署 答 因为我把它们放在服务器运行 都是开发模式 生产模式实在不会弄 所以就这样了 2 系统环境 答 腾讯云服务器 系统为 ubuntu 版本不记得 应该是比较高的 3 前提假设 答 假设你的服务器已经安装
  • Nginx启动报No mapping for the Unicode character exists in the target multi-byte code pa

    安装路径不能含有中文
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • 【数据结构】带你手撕八大排序

    目录 一 排序的基础知识 1 排序的概念 2 排序的应用 3 常见的排序算法 二 八大排序的实现 1 插入排序 直接插入排序 直接插入排序的特性总结 2 插入排序 希尔排序 希尔排序的特性总结 3 选择排序 直接选择排序 直接插入排序特性总
  • 老版迅雷5.8无限制经典版

    迅雷5 8不升级版是一款经典热门的P2P下载工具 迅雷5 8去广告绿色版已完全对弹出式广告进行屏蔽 并自动开启高速下载通道 支持磁力链接和网页下载 完美支持WIN8 1 WIN10 不定时检测去除无用组件 为用户提供绿色纯净的下载环境和高速
  • CentOS7 安装Teamviewer

    CentOS7 安装Teamviewer 下载 wget https download teamviewer com download teamviewer i686 rpm 安装 yum install y 文件名 在终端执行一下命令进行
  • 异步通信时钟亚稳态打拍

    为了降低亚稳态出现的概率把异步信号单比特打两排 将下面的即可 最后用第三位的数据就是打两拍后的结果 在这里插入代码片 reg 2 0 wr n r always posedge clk or nesedge rst n begin if r
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • 选择多级分类_分类汇总——Excel中最直接有效的数据汇总方式

    在我们正常处理数据过程中 通常会有用到对数据中某一个或者多个指标 字段 进行汇总 求和 求平均等 的操作 我们可以使用譬如sumif sumifs averageif count等一些函数进行 这些函数在后面的文章中我也会讲到 今天我们来讲
  • [项目管理-15]:项目执行中的三大管理者:项目活动管理、职能部门管理、产品架构设计。

    目录 1 矩阵项目管理 2 项目活动管理 2 1 项目架构 2 2 项目管理活动 3 职能部门管理 要与产品 设备架构一致 3 1 组织架构 3 1 需求部门 3 2 硬件开发部门 3 3 软件开发部门 3 4 测试部门 4 产品设备管理
  • 部署前后端分离项目前端vue后端django

    1 前端部署 前后端分离的项目 部署时 前端我们只需要打包成dist文件 放到到后端项目中即可 npm run build 2 后端部署 后端部署 我这里主要讲基于uwsgi启动项目的方式 2 1 uwsgi的配置 uwsgi master
  • 6个好用的AI绘画工具,一键生成超精美图片!

    给大家分享6个好用的AI绘画工具 操作简单 小白也能用 生成的图片效果也好 其中有几个还完全免费 先给大家看看一些生成的图片吧 1 Vega AI 一个免费的AI绘画网站 手机号登录之后就可以使用了 它有文生图 图生图和条件生图的模式可选
  • 2023年最新5A景区有多少个?Python可视化告诉你

    2023年最新5A景区有多少个 Python可视化告诉你 五一小长假来了 很多人想抓住小长假的机会去旅游 5A景区是大多数人的首选 全国最新有多少个5A景区呢 应该还有很多人不知道 本文用Python进行可视化 告诉你答案 各年5A景区数量
  • vue3使用import.meta.env在vite.config.ts下使用env环境变量的方法

    vue3使用import meta env在vite config ts下使用env环境变量的方法 编程一枚的博客 CSDN博客
  • 一个关于jvm堆溢出引发的思考

    在本地测试无误的程序 放上正式服时 出现了堆溢出 本地是Windows系统下的 服务器是linux系统 后来经过测试发现是我在本地跑程序时 在eclipse中添加了如下参数 此处先解释下上面各参数的的含义 Xms512m 堆的最小值 Xmx
  • mysql视图

    一 什么是视图 视图是指计算机数据库中的视图 是一个虚拟表 其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据 但是 视图并不在数据库中以存储的数据值集形式存在 行和列数据来自由定义视图的查询所引用的表 并且在引用视图时动