Mysql之进阶宝典系列-视图

news2024/12/25 12:21:34

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.coloradmin.cn/o/726025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS学习路之开发篇—数据管理(关系型数据库)

关系型数据库概述 关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。HarmonyOS关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口&am…

深度学习-GPU多卡并行训练总结

1.为什么要使用多GPU并行训练 简单来说,有两种原因:第一种是模型在一块GPU上放不下,两块或多块GPU上就能运行完整的模型(如早期的AlexNet)。第二种是多块GPU并行计算可以达到加速训练的效果。想要成为“炼丹大师“&…

【原生HTML+SpringBoot】电子病历编辑器源码

一、简介 本系统主要面向医院医生、护士,提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式,通过浏览器方式访问和使用系统功能,提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#x…

常见面试题之JVM组成

1. JVM由那些部分组成,运行流程是什么? JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收机制 JVM由哪些…

sqldeveloper 连接 MySQL

sqldeveloper 连接 MySQL 工作中使用 Oracle 用户的小伙伴,sqldeveloper 是常用的开发和运维工具之一 工作中如果连接MySQL需要安装额外的客户端工具 不但学习成本高而且维护也较为麻烦 能不能使用 sqldeveloper 可以同时管理Oracle和MySQL两种甚至更多种数据库 成为…

基于Javaweb实现ATM机系统开发实战(一)基础配置和搭建

一、环境介绍 JDK:JDK1.8 IDEA:2020 MYSQL :MYSQL5.7 Navcat :mysql的客户端工具 Tomcat:tomcat5.7 二、项目简介 本项目主要实现一个模拟ATM机存款、取款、转账功能的一个系统,可以查看打印交易明细,后台用户可以管理用户账户卡信息。本系统主要是针对计…

Java易忘知识点

Java八大基本类型 整数类型:byte,1字节,8位,最大存储数据量是255,存放的数据范围是-128~127之间。整数类型:short,2字节,16位,最大数据存储量是65536,数据范…

centos下./configure报错:Permission denied

./configure 文章目录 ./configure报错解决方案使用chmod给./configure赋予x权限sftp给configure文件赋予x权限 ./configure报错 -bash: ./configure: Permission denied解决方案 使用chmod给./configure赋予x权限 sudo chmod x ./configuresftp给configure文件赋予x权限

推荐一个基于Java 的在线网盘开源程序

目录 一、软件简介 二、功能列表 文件列表 画廊模式 视频预览 文本预览 音频预览 PDF 预览 Office 预览 3d 文件预览 生成直链 页面设置 后台设置-登录 后台设置-存储源列表 后台设置-存储源权限控制 后台设置-添加存储源(本地存储) 后台设置-添加存储源 后…

Spring Boot中的请求参数绑定及使用

Spring Boot中的请求参数绑定及使用 在Web应用程序中,请求参数绑定是非常重要的操作。Spring Boot框架使得请求参数绑定变得非常简单,通过使用注解和预定义的类可以轻松地实现此操作。本文将介绍Spring Boot中的请求参数绑定及其使用。 请求参数绑定 在…

第十章:C语言数据结构与算法初阶之链式二叉树

系列文章目录 文章目录 系列文章目录前言一、链式二叉树的定义二、链式二叉树的实现三、链式二叉树的遍历1、前序遍历/先根遍历2、中序遍历/中根遍历3、后序遍历/后根遍历4、层序遍历5、前/中/后序遍历的关系 四、节点个数以及高度等1. 二叉树节点的个数2. 二叉树叶子节点个数3…

Java面试知识点复习​_kaic

一、后端基础 1.Java基础、集合、线程、异常(自定义异常)流 2.mysql、redis、mongodb(为什么使用) 3.ssm、springboot、springcloud、mybatis-plus 1.接口和抽象类的区别 二、前端基础 1.事件 三、实习和项目 1.博客项目的日志配置(切面&a…

flutter tabBar 的属性及自定义实现

flutter tabBar 的属性及自定义实现 前言一、TabBar是什么?二、TabBar 自定义三、 Tab 自定义总结 前言 在Flutter中,TabBar的indicatorPadding属性用于设置指示器的内边距,而不是用于调整指示器和文字之间的间距。要调整TabBar中指示器和文字…

Field ‘非主键_id‘ doesn‘t have a default value

参考文章 Field ‘非主键_id‘ doesn‘t have a default value 的sql报错有两种情况 1.如果id是主键的话,一般是主键没有添加自增导致的错误 2.如果报错的是非主键id 那么是数据库设置错误 前端请求参数根本没有传入business_id 但是数据库报错 解决方法 把数据库数据限制n…

python 第九章 常用操作

系列文章目录 第一章 初识python 第二章 变量 第三章 基础语句 第四章 字符串str 第五章 列表list [] 第六章 元组tuple ( ) 第七章 字典dict {} 第八章 集合set {} 文章目录 系列文章目录9.1公共操作运算符 合并* 复制判断数据是否存在 公共方法len()delmax()min()rangeenume…

css实现文档目录(中间分割线宽度不定)

css实现文档目录(中间分割线宽度不定) 先上图片看效果 布局 数据 css样式 其实挺简单的,flex直接搞定

十六、centos7 下给python3创建虚拟环境

十五、centos7 下给python3创建虚拟环境 1.先说下为什么要创建虚拟环境 python3安装完成后,安装第三方库 pip3 install requests -i https://pypi.doubanio.com/simple提示如下让使用虚拟环境,不使用,即便是安装,也不能使用已经…

长连接和短链接详解

长连接和短链接详解 日常工作和生活中接触到的软件系统大多数情况下是由多个进程共同协作进行的,所以,了解进程之间如何进行高效的通信至关重要。 进程之间的通信有不少方式包括管道(包括无名管道和命名管道)、消息队列、信号量、…

Vue3在外部js文件获取Vue实例对象中的方法

刚开始想用getCurrentInstance 获取 发现这玩意只能写在setUp里面 然后百度发现在外部js文件只能先引入main.js在使用,这里注意要先将app实例导出 然后在外部js引用 就能获取到实例对象了 这点跟Vue2还是有很大区别

【SLAM14讲】 SLAM数学基础

一、向量 我们确定一个坐标系,也就是一个线性空间的基 (e1, e2, e3), 那就可以谈论向量 a 在这组基下的坐标了: 1.1 内积 内积可以描述向量间的投影关系 1.2 外积 外积的方向垂直于这两个向量,大小为 |a| |b|sin 〈a, b〉&…