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

相关推荐
The_Ticker12 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客18 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客22 分钟前
ETCD调优
数据库·etcd
Json_1817901448028 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗40 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋1 小时前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网2 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!2 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。3 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库