MySQL-视图 (ಥ_ಥ)

文本目录:

❄️一、什么是视图:

❄️二、创建视图:

❄️三、使用视图:

 ❄️四、修改数据:

1、注意事项:

❄️五、删除视图:

 ❄️六、视图的优点:

❄️总结:


        对于这个视图这个概念呢,是非常简单的一个知识点,简单来说就是为了在我们的查询的时候,不允许让人查询到一些特殊的字段,并且可以使我们的联合查询这个语句呢变得简单一些,我们的来看视图如何使用、如何创造、有何作用。

❄️一、什么是视图:

       视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。

这个时候我们呢,可以使用 视图来解决这个问题。 


❄️二、创建视图:

语法:

CREATE VIEW view_name [(column_list)] AS select_statement
 

我们来举一个示例:

查询学生的信息和考试成绩。 

学生ID、学生姓名、班级ID、班级姓名、课程和所对应的成绩

我们来看使用 SQL 语句来查询这个信息:

       这个呢就是 SQL 语句的查询上面要求的信息了,但是如果我们的每一个使用者在查询的时候呢都需要去编写 这么麻烦的SQL 语句的话呢,这就很麻烦了,这时候我们就可以使用视图来把这个语句封装到 视图中,来便于查询。

     这里我们要注意当我们创建 视图的时候呢,对于上面SQL中有 3个 name 这样就会使我们的 视图创建的时候呢,会使 字段名 重复,而报错,所以呢这里我们的SQL语句要进行更改一下,使其添加一个别名。

create view v_student as (
select 
st.student_id,
st.`name` as student_name,
cls.class_id,
cls.`name` as class_name,
co.course_id,
co.`name` as course_name,
sc.score
from student st,class cls,course co,score sc
where st.class_id = cls.class_id
and st.student_id = sc.student_id
and sc.course_id = co.course_id
order by st.student_id
);

      当然,如果不想要注意对于SQL语句的编写的话,我们也可以在创建 视图的时候呢,进行指定列这个时候呢,我们就不需要在 SQL 语句中起别名进行区分了。

create view v_student_v1 (
id,name,class_id,class_name,course_id,course_name,score 
)as (
select 
st.student_id,
st.`name`,
cls.class_id,
cls.`name`,
co.course_id,
co.`name`,
sc.score
from student st,class cls,course co,score sc
where st.class_id = cls.class_id
and st.student_id = sc.student_id
and sc.course_id = co.course_id
);

这些呢就是我们的创建视图的方法了。


❄️三、使用视图:

     我们在上面已经创建了,两个视图了,接下来我们来看看对于这个 视图 如何使用。

我们由上面创建的 视图来进行 查询操作:

同样对于我们另一个 视图多的查询也是这样编写的。 

OK,这个就是我们对于 视图的基本使用了。


 ❄️四、修改数据:

修改真实表:

     我们来看看对于我们真实表的数据之后呢,对于我们的视图里面的数据会不会进行更改:

      我们可以看到,我们把其 score 的成绩进行了更改,那么我们来看看这样的情况下对于 视图有没有影响:  

我们可以看到对于 在真实表中的成绩呢,在视图中同样会被影响。


修改视图:

      我们已经知道了对于更改 真实表的数据,那么我们的视图会被影响,那么接下来我们来看看如果修改 视图的数据后,对于真实表会不会有影响:

我们可以看到对于我们修改了,视图中的数据,在真实表中对应的数据也进行了更改。

但是我们来看一个情况:

我们可以看到在这个 视图 中如果修改成绩的话呢就会进行报错,这是为什么呢?

问题出在了我们在创建 视图的时候了,我们来对比一下两个视图: 

    我们可以看到 对于v_student 这个视图在创建的时候呢,我们有 order by 这个 SQL 语句,但是对于 v_student_v1 这个视图呢就没有这个SQL语句,问题就出现在了这里。

   所以对于我们的修改数据的时候呢,我们有一些注意事项:

1、注意事项:

      1)、修改真实表会影响视图,修改视图同样会影响真实表。

      2)、以下的视图不可修改:

            a、创建视图时使用聚合函数的视图

            b、创建视图时使用 DISTINCT

            c、创建视图的时候使用了 GROUP BY 和 HAVING 子句

            d、创建视图的时候使用了 UNION 和 UNION ALL

            e、查询列表中使用了子查询

            f、在 FROM 子句中引用不可更新视图


❄️五、删除视图:

 语法:

drop view view_name;
 

这个方法呢就非常简单了,和我们的的删除表是一样的,我们来演示一遍:

这个呢就是我们已经把 v_student 这个视图删除了。


 ❄️六、视图的优点:

     1. 简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑。

     2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,一个系统的用户表中,可以创建一个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表。

     3. 逻辑数据独立性:视图提供了⼀种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。使用到应用程序与数据库的解耦

     4. 重命名列:视图允许用户重命名列名,以增强数据可读性。


❄️总结:

      OK,这个对于视图呢我们就到这里就结束了,对于这个呢 视图 是非常简单的一个知识了,我们在下一篇博客中介绍有关与 索引 的知识,让我们尽情期待吧!!!拜拜~~~

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

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

相关文章

HT7179 26.8V,15A高效升压转换器

1、特征 输入电压范围:2.7V-25V 输出电压范围:最高26.8V 固定开关频率:350kHz 可编程峰值电流:最高15A 高转换效率1 95% (PVIN 12V, VOUT25V, IOUT 2A) 94%(PVIN 12V, VOUT25V, IOUT 4.5A) 93%(PVIN 7.2V, VOUT12V, IOUT 1.5A) 90% (PVIN 7.2V, VOUT12V, IOUT 5A) 96%(PVIN…

Perl打印9x9乘法口诀

本章教程主要介绍如何用Perl打印9x9乘法口诀。 一、程序代码 1、写法① use strict; # 启用严格模式,帮助捕捉变量声明等错误 use warnings; # 启用警告,帮助发现潜在问题# 遍历 1 到 9 的数字 for my $i (1..9) {# 对于每个 $i,遍历 1…

MoCoOp: Mixture of Prompt Learning for Vision Language Models

文章汇总 当前的问题 1)数据集风格变化。 如图1所示,对于一个数据集,单个软提示可能不足以捕获数据中呈现的各种样式。同一数据集中的不同实例可能与不同的提示符兼容。因此,更**自然的做法是使用多个提示来充分表示这些变化**。 2)过拟合…

V4L2驱动框架

文章目录 一、V4L2简介二、v4l2驱动关键组件(一)video_device结构体v4l2操作方法结构体v4l2的ioctl操作方法结构体 (二)v4l2_device结构体 一、V4L2简介 V4L2,即Video for Linux two,是Linux内核中用于视频…

qt项目使用其他项目的ui之单继承之成员变量

第一步添加.ui文件 第二步&#xff0c;点击编译(原理&#xff1a;qt的uic会将.ui界面编译成c文件) 第三步&#xff1a;在编译后的目录下找到#include “ui_pagewidget.h” 第四步&#xff1a; #ifndef USA_H #define USA_H#include <QWidget>#include "ui_pagew…

设计模式概览

设计模式是一种解决常见编程问题的经验总结&#xff0c;提供了代码的可重用性、可扩展性和可维护性。常见的设计模式有23个&#xff0c;主要分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。下面是这三类设计模式的详细分类和讲解&#xff1a; 一、创建型模式 创建…

记一个src中危-图像大小与请求参数可修改

记一个src中危-图像大小与请求参数可修改 漏洞描述 服务器生成了一个具有客户端指定尺寸的图像&#xff0c;如果未实施任何限制&#xff0c;则可能导致拒绝服务攻击。 漏洞危害 攻击者不需要在此类攻击中投入资源&#xff0c;但服务器可能会分配所需的像素缓冲区&#xff0…

rk3588_DRM_显示

DRM简介&#xff08;Direct Rendering Manager&#xff09; hdmi 查看hdmir接口状态 cat /sys/class/drm/card0-HDMI-A-2/statusconnected 参考文章 rk3588_dp调试_rk3588 dp接口适配-CSDN博客

十六、【智能体】如何高效利用智能体知识库:打造智能助理的核心支撑

“知识库” 节点可以理解为一个集中存储和管理知识的地方。 就像一个装满各种工具和资源的工具箱&#xff0c;它包含了大量的信息、数据、文档、经验总结等各种知识内容。 为我们提供了一个便捷的途径来获取所需的知识&#xff0c;以解决问题、做出决策或者进行学习和研究。 …

Windows无法打开组策略 | Windows家庭版如何添加和打开组策略

什么是组策略&#xff08;Group Policy&#xff09;&#xff1f; 组策略 是微软Windows操作系统中的一个重要功能&#xff0c;它允许系统管理员通过统一的界面集中配置计算机和用户设置。 组策略设置是通过编辑“组策略对象”&#xff08;GPOs&#xff09;来实现的&#xff0c;…

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会

10月15-16日&#xff0c;第六届中新数字金融应用博览会与2024金融科技大会&#xff08;简称“金博会”&#xff09;在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”&#xff0c;围绕“赋能金融高质量发展&#xff0c;金融科技创新前行”…

Python 学习笔记(十二)—— 网络编程

目录 一、网络编程的基本概念 1.1 IP地址 1.1.1 IP的版本 1.1.2 IP的分类 1.1.2.1 公有地址 1.1.2.2 私有地址 1.1.3 IP地址的范围 1.1.4 回环测试 1.2 常见的网络设备 1.3 端口 1.3.1 端口分配 二、网络通信协议 2.1 常用网络协议 2.2 OSI网络协议七层模型 2.3…

几张图就让你掌握InnoDB 存储引擎底层逻辑架构

前言 &#x1f680; 博主介绍&#xff1a;大家好&#xff0c;我是无休居士&#xff01;一枚任职于一线Top3互联网大厂的Java开发工程师&#xff01; &#x1f680; &#x1f4a1; 无论你是刚刚踏入编程世界的新人&#xff0c;还是希望进一步提升自己的资深开发者&#xff0c;…

10.24.2024刷华为OD C题型(四) -- 对象list按照多个属性排序

文章目录 最长连续子序列AI面板识别语法知识记录 最长连续子序列 https://www.nowcoder.com/discuss/592408743019589632 if __name__ "__main__":# 获取用户输入# numbers int(input().split(,))# str_arr input().split(,)arr [int(num) for num in input(…

【安装教程】使用WSL工具,在Windows11系统上安装Linux模拟环境(逐步教程)

目录 一、为什么要学习Linux系统 二、Linux模拟环境&#xff08;WSL&#xff09; WSL的官方文档 1、下载WSL 2、安装Ubuntu 结语 提示&#xff1a;WSL下的Linux模拟环境是纯命令行操作的。如果想要使用桌面系统&#xff0c;则应该考虑其他的虚拟机&#xff0c;如VMware。我…

从校园到职场:Java实习生面试常见问题

Java实习生面试通常会涵盖多个方面的知识&#xff0c;包括基础知识、项目经验、解决问题的能力以及面试技巧。以下是一些常见的Java实习生面试题及其回答技巧&#xff1a; Java基础知识 问题&#xff1a;Java有那些基本数据类型&#xff0c;String是不是基本数据类型&#xff…

java实现redis的消息发送和消费,类似kafka功能

确保在 pom.xml 中添加了 Spring Data Redis 和 Jedis 的依赖。如下所示&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency&g…

C数组与字符串

1.数组 数组是一组有序的、类型相同的数据的集合&#xff0c;这些数据被称为数组的元素。 每个数组都有一个名字&#xff0c;我们称之为数组名。 数组名代表数组的起始地址。 数组元素由索引或下标标识&#xff0c;索引或下标从0开始 数组的特性必须在使用前定义&#xff1…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

OpenIPC开源FPV之Ardupilot配置

OpenIPC开源FPV之Ardupilot配置 1. 源由2. 问题3. 分析3.1 MAVLINK_MSG_ID_RAW_IMU3.2 MAVLINK_MSG_ID_SYS_STATUS3.3 MAVLINK_MSG_ID_BATTERY_STATUS3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW3.5 MAVLINK_MSG_ID_GPS_RAW_INT3.6 MAVLINK_MSG_ID_VFR_HUD3.7 MAVLINK_MSG_ID_GLOBAL_P…