视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql---视图_MySQL
2020-11-09 19:58:24 责编:小采
文档
 视图是一张虚拟的表,并没有实际存储数据,存储的是一种“函数关系”。

语法:

create view 视图名 as select语句;

为什么说视图存储的是一种函数关系?

当引用视图时,它会根据这种关系到创建视图的各个表中去寻找相关字段,并按照这种关系进行运算得到结果。所以视图不需要存储数据,只需要存储这种“函数关系”。

如表1是记录长方形长的表

长(cm) 10

如表2是记录长方形宽的表

宽(cm) 20

现在创建一个视图用来求长方形面积

面积 长*宽 当需要引用视图的时候,视图会按照函数关系“面积=长*宽”到表1和表2中取数据运算得到所需结果。实际上视图并没有存储每个长方形的面积。以上表设计不严谨只是为了说明问题。

表改变会改变视图吗?

因为是函数关系f(x,y),当x或者y有一个变化时,f(x,y)的值一定会变化。x和y相当于创建视图的表,f(x,y)相当于视图。

创建一张学生成绩表

各个字段分别代表“学生ID”,“数学成绩”,“语文成绩”,“英语成绩”。

现在创建一个求各个学生平均成绩的视图

对表做一下改动,看看视图会不会跟着一起变化

再看看视图的内容

视图的确变化了,所以表的变化一定会影响视图。

视图改变会改变表吗?

这不一定,如果视图和表是以一个对应的,即f(x,y)可以反得到x,y(类似反函数关系)。这种情况下,视图改变会影响原有表。

对于求平均成绩的视图,无法由平均成绩得到各科的成绩,所以他们不是一一对应关系,这种情况Mysql不允许改变视图。

视图有三种实现方式

merge:引用视图时,将引用时的条件与创建视图时的条件合并。构成新的查询语句去各个表中查询。

以之前的平均分视图为例,红色划线为创建视图的查询语句

现在要求平均分前三高的学生,可以直接引用视图来查询

如果algorithm设置为merge

实际的操作是将这两次的查询条件合并相当于

temptable:引用视图时,先按照创建视图的条件查询各个表,将结果生成临时表,再对临时表进行查询。

undefined:数据库默认undefined,由数据库根据情况决定用merge还是temptable。

视图的作用

(1)方便操作:如果要经常用到某个临时表时,比如上面的平均分视图。如果没有定义视图,每次都需要求平均分临时表,再去对临时表进行查询。有视图就很方便,直接查询视图就可以了。

(2)安全考虑:如果两个公司合作,需要开放双方的一些用户信息,但是又不想公布一些涉及隐私或机密的信息(如用户密码),可以生成不包含密码字段的视图给对方。对方直接使用视图即可满足要求。

下载本文
显示全文
专题