MySQL-视图 (ಥ_ಥ)

文本目录:

❄️一、什么是视图:

❄️二、创建视图:

❄️三、使用视图:

❄️四、修改数据:

1、注意事项:

❄️五、删除视图:

❄️六、视图的优点:

❄️总结:


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

❄️一、什么是视图:

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

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


❄️二、创建视图:

语法:

CREATE VIEW view_name [(column_list)] AS select_statement

我们来举一个示例:

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

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

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

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

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

java 复制代码
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 语句中起别名进行区分了。

java 复制代码
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,这个对于视图呢我们就到这里就结束了,对于这个呢 视图 是非常简单的一个知识了,我们在下一篇博客中介绍有关与 索引 的知识,让我们尽情期待吧!!!拜拜~~~

相关推荐
ictI CABL15 分钟前
redis连接服务
数据库·redis·bootstrap
苍煜22 分钟前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
xmjd msup1 小时前
mysql的分区表
数据库·mysql
Lyyaoo.1 小时前
【JAVA Spring面经】Spring 事务失效情况
java·数据库·spring
MeAT ITEM1 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dovens1 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
IOT.FIVE.NO.11 小时前
claude code desktop cowork报错解决和记录Workspace..The isolated Linux environment ...
linux·服务器·数据库
Rick19931 小时前
mysql 慢查询怎么快速定位
android·数据库·mysql
科技小花8 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56619 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python