MySQL视图附带例子详解(小白都能懂哦)

1.视图的概念
2.视图的应用场景
3.视图的特点
4.创建视图的格式
5.视图的修改
6.视图的删除
7.视图的查看
8.视图的更新
9.视图和表格的对比
10.视图的优缺点

在这里插入图片描述

1.视图的概念

视图是一种虚拟的表,和普通表用法一样,不是在内存中单独开辟一片空间(我们正常的表都是以储存的数据值形式存在,就是会单独在内存里边开辟一块空间),并且是在使用视图的时候动态生成的,只保存了sql逻辑,不保存查询结果

2.视图的应用场景

重用SQL语句;
1.简化复杂的SQL操作。在编写查询后,可以方便的重用它而不必知道它的基本查询细节;
2.使用表的组成部分而不是整个表;
3.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限;
4.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

3.视图的特点

1.视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
2.视图是由基本表(实表)产生的表(虚表)。
3.视图的建立和删除不影响基本表。
4.对视图内容的更新(添加,删除和修改)直接影响基本表。
5.当视图来自多个基本表时,不允许添加和删除数据。

4.创建视图的格式

create view + 视图名(自定义) + as select查询语句

举个例子,假如有一个学生信息表student,还有一个学生文理科状况表aas如图
student:
在这里插入图片描述
aas:
在这里插入图片描述

我们现在想要查看女生的姓名性别文理科状况,然后再查看选理科的同学的姓名性别文理科状况
按照正常写法:
1.查看女生的姓名性别文理科状况:

SELECT sname,ssex,subject from student a join aas b on a.as_id=b.id where ssex=“女”

2.查看选理科的同学的姓名性别文理科状况

SELECT sname,ssex,subject from student a join aas b on a.as_id=b.id where b.subject=“理科”

但是我们如果利用视图的话:
我们先把学生的姓名姓名文理科状况组合成一张视图:

create view abc as select sname,ssex,subject from student a join aas b on a.as_id=b.id

1.查看女生的姓名性别文理科状况

select * from abc where ssex=“女”

2.查看选理科的同学的姓名性别文理科状况

select *from abc where subject=“理科”

abc是视图的名字

这么看起来好像视图比普通的查询少不了多少代码,但是当我们用到视图部分的语句越多的时候,那么视图的优势就越明显,而且越简便

5.视图的修改

第一种方式:

create or replace vive +视图名 as + 查询语句

语义是若该视图名不存在那么重新创建一个视图,如果存在那么新的查询结果就会覆盖原始数据

那么我们按照第四点提供的两个表和一张名为abc的视图举例
我们把视图改成只有学生的姓名和文理科:

create or replace view abc as select sname,subject from student a join aas b on a.as_id=b.id

然后视图abc就变成了:
在这里插入图片描述
第二种方式:

alter view + 视图名 as +查询语句

表示的意思是查询语句覆盖已知视图

6.视图的删除

drop view 视图1,视图2...

7.视图的查看

desc +视图名
或者
show create vive +视图名

8.视图的更新

视图的更新是对视图进行增删改,视图的增删改会对原图进行同样的更改,视图的可更新性和视图的查询有定义关系

以下的情况是不能更新:

1.包含以下关键字的sql语句:分组函数,distinct,group by,having,union或union all
2.常量视图(常量视图代表查询一个已经查找好的表格或者常量等)
3.select中包含子查询
4.join
5.from一个不能更新的视图
6.where子句的子查询引用了from子句中的表

注意这里的不能更新不代表增删改的功能都不能使用,可能只具有其中一种或者几种功能,但是统称不能更新,一般的视图的更新用的比较少

9.视图和表格的对比

1.创建方式不同
2.表格占据物理空间视图不占据物理空间(只是没有为视图数据没开辟空间进行存储,但是为视图的逻辑语句开辟空间存储,这种说法只是针对视图和表的数据而言)
3.表能进行增删改但是视图一般是不行的

10视图的优缺点

10.1视图的优点

1.查询简单化。视图能简化用户的操作
2.数据安全性。视图使用户能以多种角度看待同一数据,能够对机密数据提供安全保护
3.逻辑数据独立性。视图对重构数据库提供了一定程度的逻辑独立性

10.2视图的缺点

1.性能。数据库必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也把它变成一个复杂的结合体,需要花费一定的时间。
2.修改限制。当用户试图修改视图的某些行时,数据库必须把它转化为对基本表的某些行的修改。事实上,当从视图中插入或者删除时,情况也是这样。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的

猜你喜欢

转载自blog.csdn.net/qq_45737068/article/details/106154731