ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/8/28 15:25:49 拓冰建站 浏览量
MySQL中的视图(如果想知道MYSQL中有关视图的知识,那么只看这一篇就足够了!) 前言视图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 * FROMstudent_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表进行连接从而查询每个学生的班级信息。 *SELECTss.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 VIEWstudent_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中使用视图的好处了总的来说视图是数据库中非常强大且有用的工具它允许开发者通过封装复杂的查询来简化数据的使用和访问并且视图不仅提高了数据库查询的效率还增强了数据的安全性并提供了逻辑数据独立性。* * *以上就是本篇文章全部内容~~