初始MYSQL数据库(7)—— 视图

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-优快云博客

所属专栏: MYSQL

引言

前面我们学习MySQL数据库时,创建表之后,会在表中插入数据,在需要的时候,也会进行查询数据。但是我们没有考虑到一个点:在表中的某些数据可能是属于私密信息,如果也被查出来了的话,那么就算是泄露了用户的个人信息。因此我们要解决的就是如何将私密的信息隐藏起来,不会被查询到呢?这就是我们接下来要学习的知识:视图。

视图的概念 

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

创建并使用视图

create view view_name [(column_list)] as select_statement;

-- select_statement 是查询普通表的查询语句

-- (column_list) 是为视图指定的列名

举例:

-- 创建视图
create view student_view as (
  select id, name from student
);

-- 查询视图中的信息
select * from student_view;

-- 查询视图中的结构
desc student_view;

我们在来看看取了列名的结果是什么样的。

-- 创建视图
create view student_view2 (i,j) as (
  select id, name from student
);

-- 查询视图中的信息
select * from student_view2;

-- 查询视图中的结构
desc student_view2;

注意:

1、在命名时,视图中的列名必须必须要和查询语句中的结果集列名一致。 

2、在使用默认列名的情况下,查询语句中的列名不能重复。但是如果我们手动命名的情况下,就可以允许查询语句中的列名重复。

例如:在进行联合查询的时候,我们想要查询出两个表中对应的name列,但是如果此时的视图没有起列名的话(因为此时视图的列名默认是查询语句中的列决定的)就会导致视图中的列名重复而出现错误。反之,如果起了列名,那么就是以手动的为主,因此就不会报错。

3、视图是和真实表相关联的。当真实表中的数据更新之后,视图中的数据也会跟着变化。同理更新视图之后,真实表中的数据也会跟着受影响。

但使用一下查询语句则不能更新视图:

1、创建视图时使用聚合函数

2、创建视图时使用 DISTINCT

3、创建视图时使用 GROUP BY 以及 HAVING 子句

4、创建视图时使用 UNION 或 UNION ALL

5、查询列表中使用子查询

6、在FROM子句中引用不可更新视图 

上述情况之所以不能更新视图,是因为它们创建视图的时候,并不是真实表。如果是使用真实表创建视图,那么视图的更新就会影响的真实表;反之,如果影响不到真实表的话,那么更新还有什么意义呢?因此MySQL便规定不能不是使用真实表创建的视图是不能够更新的。

删除视图

语法:

drop view view_name;

视图的优点 

1、简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需查询视图而无需了解底层的复杂逻辑。

2、安全性:通过视图,可以隐藏表中的敏感数据。例如,一个系统的用户表中,可以创建一个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表。

3、逻辑数据独立性:视图提供了一种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的应用程序。

4、重命名列:视图允许用户重命名列名,以增强数据可读性。

评论 95
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要学编程(ಥ_ಥ)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值