Mysql之进阶宝典系列-视图

Mysql之进阶宝典系列-视图

一、视图是什么(what)

  视图本质上是一个虚表,在数据库中不实际存在,它的所有数据来源于查询中所使用的表的数据,而且是在视图调用过程中动态生成的。视图只保存了SQL查询的逻辑,不保存SQL查询的结果

二、视图的作用(why)

  1. 简化用户操作

    ​  经常使用的数据库查询语句可以被定义为视图,方便用户的操作,在定义视图时,可以根据具体功能定义视图名称,方便用户的理解。

  2. 数据安全

    ​  数据库层面上不能授权到特定的行和列数据上,通过视图用户只能查询和修改被容许访问的行和列的数据。

  3. 数据独立

    ​  视图可以屏蔽数据库真实表结构的变化。

三、视图的实现(how)

 因为视图只保存SQL查询逻辑,不保存SQL查询结果的特性,对视图进行操作时,主要工作落在SQL查询语句上。

  1. 创建视图
   create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

  1. 删除视图
  drop view  [if exists] 视图名称;

在这里插入图片描述

  1. 修改视图

    两种方法

  1.create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

   2.alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

  1. 查询视图

查询视图创建语句

   show create view 视图名称;

在这里插入图片描述

查询视图中的数据

  select 列表字段名称 from 视图名称 查询条件;

在这里插入图片描述

注意:以上视图实现语句中,**[]**里内容表示是非必填项

四、视图使用进阶

  1. 视图的检查选项

  视图的主要是用于SQL查询语句,那么能否通过视图实现数据库中数据表数据的增加、删除和修改,答案是必须的,但是因为创建视图时指定的查询语句可能带有where查询条件,会出现数据库的表中可以实现数据的增加、删除、和修改,但是在视图中体现不出来,视图的检查选项就是可以一定程度上避免这个问题。
  上面创建视图等语句中出现的with[cascaded|local] check option,即是检查选项在SQL语句的体现,使用with check option创建视图时,Mysql会去检查每个更改的行,即发生增加、删除、修改的数据行,以符合视图的定义。
  需要特别注意的时,Mysql允许基于一个视图去创建另一个视图,并会检查依赖视图中的规则以保持一致性,Mysql提供两个参数来区分检查范围:cascadedlocal,默认是cascaded。

  • cascaded
    如下图,视图v2是基于v1构建的,但是v2设置了检查选项为cascaded,v1没有设置检查选项,在执行检查时,不仅会检查v2,还会检查v1,即子视图设置检查选项为cascaded,不管其父视图是否设置了检查选项,都会级联检查父视图
     

  • local
    如下图,视图v2是基于v1构建的,但是v2设置了检查选项为local,v1没有设置检查选项,在执行检查时,只会检查v2,不会检查v1,即子视图设置检查选项为local,不会级联检查父视图
    在这里插入图片描述

  1. 视图的更新

    要是视图可更新,必须保证视图中的行与基础表中的行保持一对一关系,如果视图包含以下任何一项,视图即不可更新。

    • distinct

    • group by

    • having

    • union 或 union all

    • 聚合函数或窗口函数(sum(),max()等)

     create view stu_count as select count(*) from smbms_user;

  上述语句得到的结果是单行和单列的,与基础表中的行没有保持一对一关系,对此视图修改时,会出错。在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot家具商城系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

测试必备的15个docker命令,你都掌握了吗

1、Docker容器信息 ##查看docker容器版本docker version##查看docker容器信息docker info##查看docker容器帮助docker --help 2、镜像操作 提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。 2.1、镜像查看 ##列出本地imagesdocker images##含中间映像层docke…

SAP MESSAGE ID LB31的问题和解决办法

外协采购订单判退时报错 EA 返回交货(原因)-> 3700006717 /00009 (0000) 1 EA 不正确过帐返回给供应商,错误信息:对所需数量 XXXXXX00003122,1.000 PCS 仍然未清LB 31 搜索到lb31是和批次相关的错误 https://www.michaelmanagement.com/sap-error-mes…

OSPFv2基础02_工作原理

目录 1.OSPF接口状态 2.OSPF邻居状态 2.1 OSPF邻居状态类型 2.2 广播网络OSPF邻接关系建立 3.Router ID(路由器ID)选举 4.DR和BDR选举 4.1 为什么引入DR和BDR? 4.2 DR和BDR的作用 4.3 DR和BDR选举过程 4.4 DR和BDR选举原则 5.OSPF路…

Vue3+Vite+Pinia+Naive后台管理系统搭建之二:scss 的安装和使用

前言 如果对 vue3 的语法不熟悉的,可以移步 Vue3.0 基础入门,快速入门。 1. 安装依赖 yarn add sass -D // or npm install sass -D 2. 页面样式初始化 reset.scss /* 新建 src/assets/style/reset.scss */ /* 页面样式初始化 */ html, body, div, s…

常见的BUG---1、虚拟机启动之后,突然发现没有ens33网卡

1、问题描述 今天一开启虚拟机,发现用XShell连接不上我的一台虚拟机,其他虚拟机是正常可以连接的,我稍微看了一下XShell的配置和Windows中的映射文件(hosts),都没有啥问题,然后我就知道应该是虚…

SSM学习笔记-------Spring(二)

SSM学习笔记-------Spring(二) Spring_day021、IOC/DI配置管理第三方bean1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.1.4…

CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制

近期,CASAIM与大疆达成全自动化测量技术合作,CASAIM IS全自动化蓝光测量仪实现无人机叶片全尺寸检测及质量控制。 无人机行业在过去几年里取得了迅猛发展,大疆是全球领先的无人飞行器控制系统及无人机解决方案的研发商和生产商,客…

天津良心web前端培训学校品牌汇总(Web前端的起步薪资)

现在很多小伙伴想要了解web前端开发技术知识,但是不知道现在学习web前端值不值得,会有很多小伙伴开始犹豫学不学,学完能不能找到工作,那下面小编就通过下面三点,来给大家简单分析一下web行业,以及要不要报班…

需要为您的网站配置CDN的九大理由

所有的网站访问者都期望能够给用户提供快速高效的访问和使用体验,没有延迟或网站性能问题意味着更多的顾客和访问量。然而高流量和覆盖全球的网站意味着网站管理者面临着延迟增加和页面加载时间缓慢的挑战,这可能会导致业务损失。据统计,四分…

域服务(NETBASE第十一课)

域服务(NETBASE第十一课) web虚拟主机(一台服务器运行多个WEB站点) Web虚拟主机的实现方法: 1)同IP不同端口(基于端口的虚拟主机) 2)同端不同IP(基于IP的虚拟主机) 3)同端口同I…

DataFrame.pivot()--Pandas

1. 函数功能 通过指定的行、列重塑数据&#xff0c;进行行列转换 2. 函数语法 DataFrame.pivot(*, columns, indextyping.Literal[<no_default>], valuestyping.Literal[<no_default>])3. 函数参数 参数含义columns用于分组的列名&#xff0c;出现在透视表的列…