首页 > 数据库 >MySQL中的视图(如果想知道MYSQL中有关视图的知识,那么只看这一篇就足够了!)

MySQL中的视图(如果想知道MYSQL中有关视图的知识,那么只看这一篇就足够了!)

时间:2024-12-17 23:27:38浏览次数:8  
标签:name MYSQL 视图 查询 student scores MySQL id

        前言:视图(View)是数据库中一种虚拟的表,它通过封装复杂的查询简化数据操作,帮助用户更方便地访问数据。视图不仅提升了查询效率,还增强了数据安全性和逻辑独立性。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

在正式开始讲解之前,先让我们看一下本文大致的讲解内容:

目录

1. 视图的概念

2.视图的创建

3.视图的使用

        (1)查询视图

        (2)连接查询

4.修改视图数据

        (1)通过真实表修改数据

        (2)通过视图修改数据

5.视图的删除

6.视图的优点

        (1)简单性

        (2)安全性

        (3)逻辑数据独立性

        (4)重命名列


1. 视图的概念

        在开始正式学习视图之前,先让我们了解一下什么是MySQL中的视图,在关系型数据库中,视图(View)是一种虚拟的数据库对象,它是基于一个或多个基本表(或其他视图)的查询结果集构建的,并没有独立存储数据,每次查询视图时,数据库会根据视图定义中的 SELECT 语句重新生成数据,这意味着视图中的数据是动态的,依赖于底层表的数据。

MySQL中的视图为数据库提供了以下几种重要功能:

  • 简化复杂查询:视图可以将复杂的查询封装起来,用户不需要了解底层表结构,只需关注查询结果。
  • 数据安全性:视图可以控制用户对表中敏感数据的访问,仅暴露需要的数据列。
  • 逻辑数据独立性:当数据库的底层表结构发生变化时,只需要修改视图定义,而不需要修改应用程序的查询语句。

        因此,视图是数据库设计中非常有用的工具,特别是在需要简化查询逻辑或增强数据安全性的时候。

2.视图的创建

        在了解完了什么是MySQL中的视图之后,现在让我们开始学习一下如何在MySQL中去创建一个视图。

创建视图使用 CREATE VIEW 法。语法结构如下:

CREATE VIEW view_name [(column_list)] AS select_statement;

其中的参数意思:

  • view_name:指定视图的名称。
  • column_list(可选):定义视图中列的名称。如果不提供,视图将自动使用 SELECT 语句中列的名称。
  • select_statement:视图的查询语句,这个查询决定了视图的内容,可以包括多表连接、聚合计算等。

        这样我们就了解了如何在MySQL中去创建一个视图了,那么现在让我们使用一个案例来帮助你进一步进行理解:

例子:

        假设我们有两个表:students(存储学生信息)和 scores(存储学生成绩),我们可以创建一个视图,展示每个学生的姓名和总成绩,以下是创建视图的 SQL 语句:

CREATE VIEW student_scores AS
SELECT s.name, SUM(sc.score) AS total_score  -- 计算每个学生的总成绩
FROM students s
JOIN scores sc ON s.id = sc.student_id  -- 将学生表与成绩表连接
GROUP BY s.name;  -- 按照学生姓名分组

代码解释

  • SUM(sc.score):我们对每个学生的成绩进行求和,得到总成绩。
  • JOIN scores sc ON s.id = sc.student_id:通过 JOIN 连接 students 表和 scores 表,条件是学生的 id 和成绩表中的 student_id 匹配。
  • GROUP BY s.name:按学生姓名分组,从而计算每个学生的总成绩。

        ——至此,我们就大致的了解了如何在MySQL中创建一个视图了!!!

3.视图的使用

        了解完了视图的创建之后,在让我们学习一下如何在MySQL中去使用视图,这里我们介绍两个:查询视图和连接查询

        (1)查询视图

        查询视图就像查询普通表一样,语法与查询表相同。例如,查询 student_scores 视图中的所有学生及其总成绩:

SELECT * FROM student_scores;

代码解释

  • SELECT * FROM student_scores:这将返回 student_scores 视图中所有学生的姓名和总成绩。

        这样我们就学会了如何去查询视图了!!!

        (2)连接查询

        视图也可以与其他表进行连接查询。例如,假设我们还有一个 classes 表,存储学生所在班级的信息,如果我们想要查询每个学生的姓名、总成绩和班级名称,可以将视图与 classes 表连接,使用以下 SQL 语句:

SELECT ss.name, ss.total_score, c.class_name
FROM student_scores ss
JOIN classes c ON ss.name = c.student_name;  -- 将视图与班级表连接

代码解释

  • JOIN classes c ON ss.name = c.student_name:通过学生姓名将 student_scores 视图与 classes 表进行连接,从而查询每个学生的班级信息。
  • SELECT ss.name, ss.total_score, c.class_name:返回学生姓名、总成绩和班级名称。

        这样我们就学会了如何去连接查询了!!!

4.修改视图数据

        当然,视图不仅可以查询数据,还可以用于修改数据。然而,并不是所有视图都支持更新操作,只有在满足以下条件时,视图才允许数据更新:

  • 视图基于单一表。
  • 视图没有使用聚合函数、DISTINCT、GROUP BY、UNION 等​​​​​​​。
  • 视图查询中的列来自一个可更新的表。

        那么接下来我们将会从通过真实表和通过视图两种方式进行讲解如何去修改数据。

        (1)通过真实表修改数据

        通过底层表进行的数据修改会自动反映在视图中,例如,假设我们想要修改 students 表中某个学生的姓名:

UPDATE students SET name = 'New Name' WHERE id = 1;

代码解释

  • 该语句更新 students 表中的学生姓名,id 为 1 的学生的姓名将被修改为 New Name
  • 如果 student_scores 视图基于该表,视图中的数据也会反映这一更新。

        ——这就是通过真实表修改数据了!!!

        (2)通过视图修改数据

        某些情况下,我们可以通过视图直接修改数据,但如果视图使用了聚合函数、DISTINCT、GROUP BY 或 UNION 等操作,则视图通常是不可更新的,例如,以下视图由于使用了聚合函数 SUM(),因此不可更新:

CREATE VIEW view_with_aggregation AS
SELECT s.name, SUM(sc.score) AS total_score
FROM students s
JOIN scores sc ON s.id = sc.student_id
GROUP BY s.name;  -- 使用了聚合函数,无法更新

代码解释

  • SUM(sc.score):聚合函数 SUM() 计算学生的总成绩,这使得视图成为只读视图。
  • 由于使用了 GROUP BY,我们不能通过该视图直接更新数据。

        ——这就是通过视图修改数据了!!!

5.视图的删除

        视图既然能创建出来,那么就可以进行删除,那么在MySQL中我们如何去删除一个视图呢?当我们不再需要某个视图,可以使用 DROP VIEW 语句删除它。语法如下:

DROP VIEW view_name;

例如,删除 student_scores 视图:

DROP VIEW student_scores;

代码解释

  • DROP VIEW student_scores:此语句会删除 student_scores 视图。需要注意的是,删除视图不会影响底层表的数据,只是删除视图的定义。

        这样我们就学会了如何在MySQL中去删除一个视图了!!!

6.视图的优点

        通过以上对视图的学习,我们已经对MySQL中的视图有了一定的了解了,那么读者可能会想,我们为什么要去使用视图呢?或者说视图到底有什么好处呢?有的有的,兄弟,视图大致有以下四种好处:

        (1)简单性

        视图的最大优势之一是简化复杂查询,对于那些包含多个 JOIN、聚合或筛选条件的复杂查询,视图可以将其封装为一个简单的查询接口,用户只需要查询视图,而不需要了解其具体实现,例如,我们可以将计算学生成绩总和的复杂查询封装为一个视图:

-- 创建一个名为 student_scores 的视图
CREATE VIEW student_scores AS
-- 从学生表和成绩表中选择学生姓名和总分
SELECT s.name, SUM(sc.score) AS total_score
-- 从 students 表和 scores 表中进行连接
FROM students s
JOIN scores sc ON s.id = sc.student_id
-- 按照学生姓名进行分组
GROUP BY s.name;

        (2)安全性

        视图能够增强数据库的安全性,特别是在处理敏感数据时,通过视图,我们可以限制用户只能访问表中的部分数据,例如,我们可以隐藏学生的身份证号或其他敏感信息,只暴露学生的姓名和成绩:

-- 创建一个名为 secure_student_scores 的视图
CREATE VIEW secure_student_scores AS
-- 从学生表和成绩表中选择学生姓名和总分
SELECT s.name, SUM(sc.score) AS total_score
-- 从 students 表和 scores 表中进行连接
FROM students s
JOIN scores sc ON s.id = sc.student_id
-- 按照学生姓名进行分组
GROUP BY s.name;

        (3)逻辑数据独立性

        视图提供了很好的逻辑数据独立性,当底层表结构发生变化时,只需修改视图的定义,而无需修改应用程序中的查询,例如,如果学生表的字段发生变化,我们只需要调整视图定义,而不需要改变应用程序中的查询逻辑:

-- 创建一个名为 updated_student_info 的视图
CREATE VIEW updated_student_info AS
-- 从学生表和班级表中选择学生ID、姓名和班级名称
SELECT s.student_id, s.name, c.class_name
-- 从 students 表和 classes 表中进行连接
FROM students s
JOIN classes c ON s.id = c.student_id;

        (4)重命名列

        视图允许我们对列进行重命名,这可以使数据结果更具可读性。例如,重命名 students 表中的 id 列,使得列名更加直观:

-- 创建一个名为 renamed_student_view 的视图
CREATE VIEW renamed_student_view AS
-- 从 students 表中选择学生ID和姓名,并为这些字段重命名
SELECT s.id AS student_id, s.name AS student_name
-- 从 students 表中选择数据
FROM students s;

        通过上述的描述与例子,我们就可以大致的了解在MySQL中使用视图的好处了,总的来说,视图是数据库中非常强大且有用的工具,它允许开发者通过封装复杂的查询来简化数据的使用和访问,并且视图不仅提高了数据库查询的效率,还增强了数据的安全性,并提供了逻辑数据独立性。


以上就是本篇文章全部内容~~

标签:name,MYSQL,视图,查询,student,scores,MySQL,id
From: https://blog.csdn.net/2302_80198073/article/details/144520782

相关文章

  • MySQL常见面试题(2025年最新)
    1.char和varchar的区别①char设置多少长度就是多少长度,varchar可以改变长度,所以char的空间利用率不如varchar的空间利用率高。②因为长度固定,所以存取速度要比varchar快。③char适用于固定长度的字符串,比如身份证号、手机号等,varchar适用于不固定的字符串。2.数据库的三大......
  • ARM银河麒麟/统信UOS安装docker下mysql5.7,全步骤验证
    背景:网上找很多没有这个教程,自己写一个吧系统:银河麒麟v10桌面版/统信UOSv20桌面版架构:ARM64docker版本:20.10.7mysql版本:5.7软件包:dockr-20.10.7.tga、mysql5.7.tar软件包下载地址:将稍后提供,如需要请在评论区留言一、安装docker1.解压和移动docker安装文件tar-zxv......
  • 跨越边界:MySQL跨平台性能优化全攻略
    在当今全球化和技术多样化的背景下,确保应用程序能够在各种操作系统上无缝运行并提供一致的用户体验变得至关重要。对于数据库系统而言,这意味着不仅要保证数据的一致性和完整性,还要确保其在不同环境下的高效运作。MySQL作为世界上最受欢迎的关系型数据库管理系统之一,支持多种......
  • 预见未来:基于MySQL的实时用户行为预测系统构建指南
    在这个信息爆炸的时代,理解并预测用户的下一步行动成为了企业竞争的关键。无论是电商平台推荐商品、社交媒体推送内容还是在线广告精准投放,实时用户行为预测都能为企业带来显著的竞争优势。然而,如何高效地处理海量数据,并从中挖掘出有价值的信息,是每一个开发者和分析师面临的......
  • 守护数据隐私:构建基于差分隐私的MySQL安全共享机制
    在当今数字化时代,随着互联网和大数据技术的发展,数据的价值愈发凸显。然而,随之而来的个人隐私泄露风险也日益增加,成为社会广泛关注的问题之一。特别是在医疗、金融等领域,如何既能充分利用海量数据资源推动行业发展,又能有效保护用户隐私不被侵犯,成为了亟待解决的重要课题。本......
  • 使用Flink实现MySQL实时同步数据到StarRocks(库表级)
    这里引用官网的文章+我在使用时遇到的问题。官网已经讲解的很明白了。从MySQL实时同步StarRocks支持多种方式将MySQL的数据实时同步至StarRocks,支撑实时分析和处理海量数据的需求。本文介绍如何将MySQL的数据通过ApacheFlink®实时(秒级)同步至StarRocks。注意导......
  • 常见操作系统中安装MySQL的详细步骤
    一、在Windows系统中安装MySQL下载MySQL安装包访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/)。根据你的操作系统版本(32位或64位)选择合适的MySQLCommunityServer安装包,如MySQLCommunityServer8.0。点击下载按钮开始下载。运行安装程序找到下载好的安装......
  • 二叉树的右视图
    二叉树的右视图描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1,3,4]解释:1<---/\23<---\\54<---代码1(错误)......
  • 如何在MySQL中实现组内排序?
    在MySQL数据库中,组内排序(group-wiseordering)是一种常见的操作需求,它涉及对查询结果进行分组,并在每个分组内进行排序,这种操作在数据分析和报告生成时非常常见,尤其是在需要对每个分组的数据进行详细分析的情况下。组内排序的基本概念组内排序通常与GROUPBY子句一起使用,用于对......
  • 【MySQL】索引特性
    MySQL中的索引是用来提高数据库查询效率的一种数据结构。以下是一些MySQL索引的特性:1. 唯一性:• 唯一索引(UniqueIndex)确保索引列的值是唯一的,不允许有重复的值。2. 主键索引:• 每个表都有一个主键索引(PrimaryKey),它是一个特殊的唯一索引,并且每个表只能有一个主键......