MySQL —— 视图

概念

视图是一张虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。

视图本身不存储数据,而是通过执行查询来动态生成数据,用户可以像操作普通表一样使用视图来进行查询更新与管理等操作。

视图本身也不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。

视图的创建与使用

语法:create view view_name [(column_list)] as select_statement;

当我们有一个复杂的 sql 查询时,如果每次都有这个需求,那么每次就要写相同的 sql 语句,例如:现在有四张表,如下所示,学生表,成绩表,班级表和课程表

在这里插入图片描述
现在有一个需求:查询学生的 id ,姓名,对应的班级 ,课程名字以及对应的成绩,我们自然而然会写出下面的sql 语句:

select st.student_id as id, st.name as '姓名', cl.name as '班级', c.name as '课程', sc.score as '成绩' 
from student st, class cl, course c, score sc 
where st.class_id = cl.class_id and sc.student_id = st.student_id and sc.course_id = c.course_id
order by st.student_id asc;

在这里插入图片描述
当我们每次都想获得这张表的时候,都需要写这么长的 sql 语句,为了以后能便捷地获得这张表,我们可以使用视图,通过视图来保存这次 sql 查询的结果集。

create view v_student_course_score as  (
select st.student_id as id, st.name as '姓名', cl.name as '班级', c.name as '课程', sc.score as '成绩' 
from student st, class cl, course c, score sc 
where st.class_id = cl.class_id and sc.student_id = st.student_id and sc.course_id = c.course_id
order by st.student_id asc
);

通过视图的创建,我们来查看表的数量,发现视图已经在数据库中:
在这里插入图片描述

当我们还有上面的 sql 查询需求的时候,我们直接查询视图就可以得到结果集了。

select * from v_student_course_score;

在这里插入图片描述

注意:

如果视图的创建的时候,如果select_statement 没有使用别名,并且发现有些名字是有重复的话,就会创建失败:

在这里插入图片描述
这三个的列名都是 name,视图无法区分,并且报下面的警告:

在这里插入图片描述
警告的意思是有重复的 name


所以在创建视图的时候要避免列名的重复,解决方法有两种,一种是在 select_statement 中就定义好别名,另一种就是在创建视图的时候在视图中定义别名,第一种方法在上面已经演示过,现在来演示第二种方法:

create view v_student_course_score2 (
id, 姓名, 班级,课程, 分数
)
as  (
select st.student_id, st.name, cl.name, c.name, sc.score 
from student st, class cl, course c, score sc 
where st.class_id = cl.class_id and sc.student_id = st.student_id and sc.course_id = c.course_id
order by st.student_id asc
);

注意取中文列名的时候不用加单引号

在这里插入图片描述


我们可以通过show create view view_name; 来查看视图的创建信息包括视图名,视图创建语句,视图使用的字符编码集和排列规则
在这里插入图片描述

视图的更新

一句话:在视图能更新的情况下,视图的更新会影响到基本表,基本表的更新也会影响到视图,二者是相互影响的关系。

下面是学生表,我们将学生表的黑旋风李逵改名为李逵:
在这里插入图片描述
在这里插入图片描述

现在我们来看一下视图,会发现视图的黑旋风李逵也被修改为李逵:
在这里插入图片描述


当我们修改视图,将李逵的id 修改为50:
在这里插入图片描述
我们会发现无法对视图进行修改,说明不是所有的视图都能进行修改,上面的信息说视图使用了 order by 子句,无法进行更新操作,在后面我会做个不能进行更新操作的视图的总结。

既然如此,我们新建立一个视图:
在这里插入图片描述

然后将李逵修改回黑旋风李逵。
在这里插入图片描述

看一下视图内容发现修改成功:
在这里插入图片描述

最后看一下学生表,也是成功被修改了:

在这里插入图片描述


现在来总结,什么样的视图不能被修改:

  1. 创建视图使用了聚合函数
  2. 使用了 distinct
  3. 使用了order by 以及 having
  4. 使用了合并查询union 或者 union all
  5. 使用了子查询
  6. 在创建视图的 from 子句中引用了不可更新的视图

视图的删除

语法:drop view view_name;

演示:视图 v_student_course_score 被删除成功。

在这里插入图片描述

小结

视图具有如下的优点:

  1. 简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑。
  2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的用户表中,可以创建一个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表。
  3. 逻辑数据独立性:视图提供了⼀种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。使用到应用程序与数据库的解耦
  4. 重命名列:视图允许用户重命名列名,以增强数据可读性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python因果推断库16】使用 PyMC 模型进行回归拐点设计

目录 例子 1 - 连续分段线性函数 import arviz as az import matplotlib.pyplot as plt import numpy as np import pandas as pdimport causalpy as cp %load_ext autoreload %autoreload 2 %config InlineBackend.figure_format retina seed 42 rng np.random.default_rn…

Android中的冷启动,热启动和温启动

在App启动方式中分为三种:冷启动(cold start)、热启动(hot start)、温启动(warm start) 冷启动: 系统不存在App进程(App首次启动或者App被完全杀死)时启动A…

AcWing算法基础课-789数的范围-Java题解

大家好,我是何未来,本篇文章给大家讲解《AcWing算法基础课》789 题——数的范围。本文详细解析了一个基于二分查找的算法题,题目要求在有序数组中查找特定元素的首次和最后一次出现的位置。通过使用两个二分查找函数,程序能够高效…

Mysql InnoDB 存储引擎简介

InnoDB 存储引擎是 Mysql 的默认存储引擎,它是由 Innobase Oy 公司开发的 Mysql 为什么默认使用 InnoDB 存储引擎 InnoDB 是一款兼顾高可靠性和高性能的通用存储引擎 在 Mysql 5.5 版本之前,默认是使用 MyISAM 存储引擎,在 5.5 及其之后版…

车型展示+接驳体验!苏州金龙海格客车闪耀汉诺威商用车展

德国当地时间9月16日,IAA汉诺威商用车展媒体日活动在德国汉诺威展览中心开幕。该展会自1897年首次举办以来,已有超过一个世纪的历史,是全球历史最长、规模最大、最具影响力的专业商用车展之一,更是世界商用车行业技术创新和发展趋…

实战案例(5)防火墙通过跨三层MAC识别功能控制三层核心下面的终端

如果网关是在核心设备上面,还能用MAC地址进行控制吗? 办公区域的网段都在三层上面,防火墙还能基于MAC来控制吗? 采用正常配置模式的步骤与思路 (1)配置思路与上面一样 (2)与上面区…

STM32 如何生成随机数

目录 一、引言 二、STM32 随机数发生器概述 三、工作原理 1.噪声源 2.线性反馈移位寄存器(LFSR) 3.数据寄存器(RNG_DR) 4.监控和检测电路: 5.控制和状态寄存器 6.生成流程 四、使用方法 1.使能随机数发生器 …

C++笔记---二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: • 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值。 • 若它的右子树不为空,则右子树上所有结点的值都大于等于…

数据结构—双向链表

结构 带头链表里的头结点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位结点不存储任何有效元素&#xff0c;只是站在这里“放哨 的” 实现双向链表 List.h #pragma once#include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool…

“RISCV+AI”

概述 设计方案 主要有两种设计方案。 RISCV核ASIC RISCV核是标准的基于RISCV指令集的CPU设计&#xff0c;ASIC部分通常是基于RISCV自带的向量扩展指令集构建的向量处理器&#xff0c;或是自定义的矩阵计算单元。 根据CPUAI ASIC部件的接口可以分为紧耦合和松耦合的设计1。 …

基于python+django+vue的学生管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

【Python笔记】PyCharm大模型项目环境配置

一、PyCharm创建新项目 二、更新pip版本 ...>python.exe -m pip install --upgrade pip 三、生成所需requirements配置文件 ...>pip freeze > requirements.txt 四、安装所需组件requirements.txt ...>pip install -r requirements.txt

【Kubernetes】linux centos安装部署Kubernetes集群

【Kubernetes】centos安装Kubernetes集群 1、环境准备 系统centos7 配置yum源参考文章 Centos系统换yum源 yum -y update 步骤1-3是所有主机都要配置&#xff0c;主机名和hosts配置完后可以使用工具命令同步 1.1 主机 一主二从 主机名ipk8smaster192.168.59.148k8snode11…

Node.js 安装及项目实践

node.js安装 node安装&#xff0c;选择版本 一直next&#xff0c;或者自己修改路径&#xff0c;添加两个包 选择自己的安装的node的路径&#xff0c;cmd或者winr cmd 显示node与npm的版本号 node -vnpm -v可以跟着这个博客将node安装 2024最新版Node.js下载安装及环境配…

ZW3D二次开发_UI_非模板表单_设置表单显示位置

1.ZW3D弹出非模板表单时可以设置弹出位置&#xff08;居中、左下角、右上角等&#xff09; 2.假设已创建好非模板表单 3.在Form属性中添加form_pos属性 4.输入值 base,CTR,0.0 &#xff0c;如下图 也可以设置为其他值显示在不同的位置&#xff0c;如下 5.重新编译&#xff0c;…

新升级|优化航拍/倾斜模型好消息,支持处理多套贴图模型!

【天元轻量化软件】一直在不断地追求进步和完善&#xff0c;以满足更多用户的各种需求。 电脑登录天元官网免费体验&#xff1a;天元轻量化软件官网 本次我们对“智能PBR”功能进行了更新。更新后的“智能PBR”支持带多套贴图的模型进行使用。 本轮更新后&#xff0c;主要受益…

防火墙--NAT技术,基于源NAT,NAT服务器,双向NAT

文章目录 防火墙--NAT技术一、基于源NAT**方式**&#xff1a;NAT No-PATNAPT出接口地址方式Smart NAT三元组 NAT 二、基于服务器的NAT多出口场景下的NAT Server 三、双向NAT 防火墙–NAT技术 基于源NAT&#xff1a;用于将内部网络的私有IP地址转换为公共IP地址&#xff0c;以便…

51单片机应用开发---数码管的控制应用

实现目标 1、掌握数码管结构、驱动原理及应用&#xff1b; 2、掌握数码管段码表推导&#xff1b; 3、会编程让开发板8个数码管动态显示。 一、什么是数码管&#xff1f; 1.数码管定义 数码管&#xff0c;也称为LED数码管&#xff0c;基本单元是发光二极管(LED)。分为七段数…

【机器学习】--- 自监督学习

1. 引言 机器学习近年来的发展迅猛&#xff0c;许多领域都在不断产生新的突破。在监督学习和无监督学习之外&#xff0c;自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;作为一种新兴的学习范式&#xff0c;逐渐成为机器学习研究的热门话题之一。自监督学习…

某思CMS V10存在SQL注入漏洞

Fofa: product"魅思-视频管理系统" 框架:ThinkPHP 5,6 1 漏洞分析&复现 位于 /controller/Api.php 控制器中的getOrderStatus 方法POST传入&#xff0c;然后直接拼接了 orderSn 变量到 where 查询中&#xff0c;导致漏洞产生. /** * 查询订单支付状态 */ pub…