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视图 的相关文章

  • 猫头虎博主的MySQL救援指南:轻松解决初始化问题(nysqld: Can create directort :mysgl mysg! 9-winx64 data errno such file o)

    博主猫头虎的技术世界 欢迎来到 猫头虎的博客 探索技术的无限可能 专栏链接 精选专栏 面试题大全 面试准备的宝典 IDEA开发秘籍 提升你的IDEA技能 100天精通Golang Go语言学习之旅 领域矩阵 猫头虎技术领域矩阵 深入探索各技
  • 神州信息一表通监管合规系统

    什么是 一表通 国家金融监督管理总局为进一步建立健全数据统计监管体系 规范数据报送指标体系 明确检测数据规则 而推行建立的一套新体系监管报送方式 提升校验准确性和信息安全性 近期 国家金融监督管理总局更是进一步加大推动 一表通 的实行试点范
  • 亚信安慧AntDB引领数字化转型:浙江移动成功实现CRM系统全域改造

    数字时代 通信运营商在不断迭代的背景下 需要不断探索数字化转型的路径 以适应快速发展的市场和技术环境 在这一浪潮中 浙江移动站在前沿 率先完成了其CRM系统的全域改造 采用了亚信安慧公司研发的AntDB数据库 为整个行业树立了数字化转型的标
  • AntDB内存管理之内存上下文之如何使用内存上下文

    5 如何使用内存上下文 使用内存上下文之前 我们需要先对其进行创建 AntDB启动时已经创建并初始化好了部分内存上下文 例如 TopMemoryContext 这个TopMemoryContext是所有内存上下文的父节点或者祖先节点 一般我
  • Navicat 16 for MySQL:打造高效数据库开发管理工具

    随着数据的快速增长和复杂性的提升 数据库成为了现代应用开发中不可或缺的一部分 而在MySQL数据库领域 Navicat 16 for MySQL作为一款强大的数据库开发管理工具 正受到越来越多开发者的青睐 Navicat 16 for My
  • 【计算机毕业设计】出租车管理系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本出租车管理系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人
  • 【计算机毕业设计】校园体育赛事管理系统

    身处网络时代 随着网络系统体系发展的不断成熟和完善 人们的生活也随之发生了很大的变化 人们在追求较高物质生活的同时 也在想着如何使自身的精神内涵得到提升 而读书就是人们获得精神享受非常重要的途径 为了满足人们随时随地只要有网络就可以看书的要
  • 【计算机毕业设计】网上拍卖系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本网上拍卖系统就是在这样的大环境下诞生 其可以帮助使用者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人员
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • python超详细基础文件操作【建议收藏】

    文章目录 前言 发现宝藏 1 文件操作 1 1 文件打开与关闭 1 1 1 打开文件 1 1 2 关闭文件 1 2 访问模式及说明 2 文件读写 2 1 写数据 write 2 2 读数据 read 2 3 读数据 readlines 2
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析

    Python MongoDB 排序 对结果进行排序 使用 sort 方法对结果进行升序或降序排序 sort 方法接受一个参数用于 字段名 一个参数用于 方向 升序是默认方向 示例 按名称按字母顺序对结果进行排序 import pymongo
  • 【计算机毕业设计】趵突泉景区的智慧导游小程序_5ztvv

    当今社会已经步入了科学技术进步和经济社会快速发展的新时期 国际信息和学术交流也不断加强 计算机技术对经济社会发展和人民生活改善的影响也日益突出 人类的生存和思考方式也产生了变化 传统趵突泉景区的智慧导游采取了人工的管理方法 但这种管理方法存
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • Oracle EBS AP发票导入 API Rejection List 第二部分

    Oracle EBS AP发票导入 API Rejection List 第二部分 The report lists the reason the invoice could not be imported and prints a bri
  • 每日变更的最佳实践

    在优维公司内部 我们采用发布单的方式进行每天的应用变更管理 这里给各位介绍优维的最佳实践 变更是需要多角色合作的 而且他是整体研发流程的一部分 在优维内部 我们坚持每日变更 打通开发环节到最终发布上线的全过程 在保证质量的前提下 尽可能提升
  • 光波导结构

    摘要 增强现实和混合现实 AR MR 领域的新应用引起了人们对带有光栅区域的光波导系统的越来越多的关注 这些光波导系统用于输入和输出耦合以及扩瞳目的 VirtualLab Fusion为这类系统的仿真和设计提供了几个强大的工具 其中一个是具

随机推荐

  • 电脑提示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视图

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