MySQL数据库视图:视图定义、创建视图、修改视图

2023-05-16

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

关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。

0 视图相关的MySQL指令

操作指令代码
创建视图CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
使用视图当成表使用就好
修改视图CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
查看数据库已有视图>SHOW TABLES [like...];(可以使用模糊查找)
查看视图详情DESC 视图名或者SHOW FIELDS FROM 视图名
视图条件限制[WITH CHECK OPTION]

1 视图

百度百科定义了什么是视图,但是对缺乏相关知识的人可能还是难以理解或者只有一个比较抽象的概念,笔者举个例子来解释下什么是视图。

朕想要了解皇宫的国库的相关情况,想知道酒窖有什么酒,剩多少,窖藏多少年,于是派最信任的高公公去清点,高公公去国库清点后报给了朕;朕又想知道藏书情况,于是又派高公公去清点并回来报告给朕,又想知道金银珠宝如何,又派高公公清点。。。过一段时间又想知道藏书情况,高公公还得重新再去清点,皇上问一次,高公公就得跑一次路。

后来皇上觉得高公公不容易,就成立了国库管理部门,小邓子负责酒窖,小卓子负责藏书,而小六子负责金库的清点。。。后来皇上每次想了解国库就直接问话负责人,负责人就按照职责要求进行汇报。
视图

安排专人管理后,每次皇上想要了解国库情况,就不必让高公公每次都跑一趟,而是指定的人员按照指定的任务完成指定的汇报工作就可以了。

和数据库相对应,每次进行查询工作,都需要编写查询代码进行查询;而视图的作用就是不必每次都重新编写查询的SQL代码,而是通过视图直接查询即可。因此:

视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。

比如,我们希望从前文提到的四张表,order_baisc,order_details,user和product中查找所有记录,需要写入代码指令:
查询
想再次查询这几个表中uid为u0001的用户的记录,有需要键入一次操作指令:
查询
也就是说,每次查询都得重新键入查询指令SQL代码,这种费时费力的体力活,对于时间就是生命的你我来说,是不划算的。所以借助视图,来执行相同或相似的查询。

2 创建视图

2.1 创建视图create view
创建视图的代码为:

>CREATE VIEW 视图名(列1,列2...)
 AS SELECT (列1,列2...)
 FROM ...;
  
  
  
  

    可以看到,创建视图和查询相比,增加了前面的CREATE VIEW 视图名 AS

    2.2 视图运用

    使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

    eg:创建order_baisc,order_details,user和product的查询视图,并通过视图查找uid为u0001的记录:
    创建视图

    2.3 修改视图CREATE OR REPLACE VIEW

    修改和创建视图可以使用代码:

    CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
      
      
      
      

      eg:
      修改视图

      2.4 查看视图
      (1)查看数据库中有哪些视图 show tables
      前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的:

      >SHOW TABLES;
        
        
        
        

        查看视图

        通过show tables;反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v_v_视图名的优势就体现出来了。
        (2)查看视图详情
        查看视图详情的方法有两种,一种是和查看表详情一样使用desc 视图名,另外一种方法是show fields from 视图名

        >DESC 视图名;
        或者
        >SHOW FIELDS FROM 视图名;
          
          
          
          

          查看视图详情

          两种方法得到的详情都是一毛一样的。

          3 视图与数据变更

          3.1 表格数据变更
          将表product中的数据进行更新,在通过视图检索:

          视图与数据变更

          可以看到表格数据变化后,在通过视图检索,得到的结果也同步发生了变化,因此,在此证明了:

          视图不是表,不保存数据,知识一张虚拟表;

          3.2 通过视图变更数据

          • (1)插入数据
          >INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');
            
            
            
            

            在此查询视图,发现插入了数据。

            视图变更数据

            • (2)跨表插入数据
              通过上图,我们可以看到,跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。

            因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

            • (3)WITH CHECK OPTION
              如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

              eg:对表product创建一个单价超过3000的视图,并加上“WITH CHECK OPTION”,之后插入一个价格为42的记录:

              “WITH CHECK OPTION”

              可以看到系统提示错误CHECK OPTION FAILED。因为视图限制了价格要高于3000.
              后面再次尝试了不加“WITH CHECK OPTION”的视图,后者可以成功插入。

              同样的,在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,也可以成功执行:
              修改记录

            通过视图修改,可能导致数据无故消失,因此:

            没有特殊的理由,建议加上“WITH CHECK OPTION”命令。

            注意点:
            1. 视图不是表,不直接存储数据,是一张虚拟的表;
            2. 一般情况下,在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。

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

            MySQL数据库视图:视图定义、创建视图、修改视图 的相关文章

            • Win10安装安卓模拟器入坑记

              笔记本换了硬盘 xff0c 安装Win10之后 xff0c 装了一堆软件和工具 xff0c 包括Docker for Windows等 xff0c 然后打算安装一个安卓模拟器 之前一直用的逍遥 xff0c 也没碰到啥问题 xff0c 这次就
            • C# 8.0 新特性

              使用C xff03 8 0中的模式 xff0c 做得更多 Visual Studio 2019预览版2已经发布 xff01 伴随它的还有一些C xff03 8 0的功能 xff0c 供您试用 主要是关于模式匹配 xff0c 但我会在最后提到
            • Android:java.io.IOException: Cannot run program "/system/xbin/su": error=13, Permission denied

              java io IOException Cannot run program 34 system xbin su 34 error 61 13 Permission denied 我的情况 同一套App程序 之前跑在Android4 0中没
            • 还在怕不可以和众多女朋友一起聊天,python教你创建多窗口,再也不怕露馅了

              需求描述 创建一个多用户 xff0c 多房间的全双工聊天室 多用户 xff0c 多房间的意思是可以有多个聊天室 xff0c 每个聊天室里可以有多个用户 xff0c 并且用户可以通过输入房间号进入聊天室 全双工的意思是聊天室中的用户在接收其他
            • webrtc媒体服务器介绍

              一 为什么需要流媒体服务 xff1f 众所周知webrtc原生的网络连接方式是P2P通信模型 xff0c 即通信双方是对等的 如下图左侧图 xff0c 通信双方直接进行音视频传输 xff0c 中间的服务器仅做两端的信令交互 将这种P2P方式
            • C语言——基础查漏补缺(二):《C程序设计试题汇编》应试概念总结

              相关文章 xff1a C语言 基础查漏补缺 xff08 一 xff09 xff1a 超长文帮你理清一些概念 C语言 基础查漏补缺 xff08 三 xff09 xff1a 谭浩强红书刷题笔记大杂烩 C语言 基础查漏补缺 xff08 四 xff
            • 6. 用冒泡法实现对10个整数按从小到大的顺序排序输出

              用冒泡法实现对10个整数按从小到大的顺序排序输出 xff08 完成sort1函数 xff09 span class hljs comment include lt stdio h gt span span class hljs keywor
            • Python图形绘制

              文章目录 前言一 turtle海龟绘图二 Python图形绘制三 绘画小黄人习题巩固 前言 海龟绘图很适合用来引导孩子学习编程 最初来自于 Wally Feurzeig Seymour Papert 和 Cynthia Solomon 于
            • 一个项目带你走进软件测试2

              文章目录 前言一 前期准备二 第一阶段1 熟悉软件项目2 阅读测试计划 三 第二阶段1 根据需求规格说明书设计测试用例2 执行测试用例3 提交bug 三 第三阶段关于项目面试问答 文档下载地址 前言 该项目针对在线的项目 xff08 鹏保宝
            • 查看ubuntu版本

              方法1 xff1a 使用命令 xff1a cat proc version 查看 proc目录下记录的当前系统运行的各种数据 version记录的版本信息可以直接通过cat查看到 xff0c 还可以看到我的gcc版本呢 Linux vers
            • 【接口自动化】接口报错500问题解决

              问题呈现 xff1a Python 43 requests接口报错返回500 xff08 后端没进行相关校验 xff0c 直接返回500 xff09 解决探索 xff1a Python 43 request生成的数据放在postman跑 x
            • 【部署教程入门级别】开源会议室小程序部署

              文章目录 前言一 项目整体二 前要准备1 安装Python 开发环境2 安装redis非关系数据库3 安装mysql服务器和客户端4 安装git工具5 安装微信开发工具6 Github或Gitee注册账号 三 正式部署1 pull源码2 部
            • Python批量获取高校基本信息

              文章目录 前言一 需求二 分析三 处理四 运行效果 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动 xff0c 每篇文章会使用两种以上的方式 xff08 Xpath Bs4 Py
            • Python爬取各大外包网站需求

              文章目录 前言一 需求二 分析三 处理四 总结 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动总结各种方式 页面源代码返回数据 xff08 Xpath Bs4 PyQuery 正
            • Python获取重庆市农场品行情

              文章目录 前言一 需求二 分析三 运行 前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 one Leave a message at the end of the article two Get wechat
            • Python获取中国大学MOOC某课程评论及其参与人数

              文章目录 前言一 需求二 分析三 运行结果 前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 一 需求 1 课程参加人数 2 课程学员名称及其评论 二 分析 首先查看网页源代码是否有需要的数据 课程参加人数 课程
            • Python项目之中国数据可视化

              文章目录 关键词一 做什么二 怎么做1 获取数据 amp amp 处理数据2 数据库设计 amp amp 存储数据3 开发后端接口4 前端页面编写 三 效果展示四 总结 关键词 PythonDjangoPython网络爬虫echarts可视
            • 关于text段、data段和bss段

              根据APUE xff0c 程序分为下面的段 xff1a text data initialized bss stack heap data bss text text段在内存中被映射为只读 xff0c 但 data和 bss是可写的 bss
            • Android 穿山甲广告联盟接入

              一 SDK接入 参考官方接入文档 xff0c 基于穿山甲版本号 3 1 0 0 导入 aar 及 SDK 依赖的 jar 包 将本 SDK 压缩包内的 open ad sdk aar 复制到 Application Module libs
            • linux下的so、o、lo、a、la文件的区别

              o 编译的目标文件 a 静态库 xff0c 其实就是把若干o文件打了个包 so 动态链接库 共享库 lo 使用libtool编译出的目标文件 xff0c 其实就是在o文件中添加了一些信息 libtool主要的一个作用是在编译大型软件的过程中

            随机推荐