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

相关推荐
IT项目管理5 分钟前
达梦数据库DMHS介绍及安装部署
linux·数据库
你都会上树?13 分钟前
MySQL MVCC 详解
数据库·mysql
大春儿的试验田18 分钟前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
Ein hübscher Kerl.1 小时前
虚拟机上安装 MariaDB 及依赖包
数据库·mariadb
长征coder1 小时前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
醇醛酸醚酮酯1 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
ladymorgana2 小时前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui2 小时前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
GreatSQL社区2 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根2 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql