mysql---视图

视图是一张虚拟的表,并没有实际存储数据,存储的是一种“函数关系”。

语法:

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)安全考虑:假设两个公司合作,须要开放两方的一些用户信息,可是又不想发布一些涉及隐私或机密的信息(如用户password)。能够生成不包括password字段的视图给对方。对方直接使用视图就可以满足要求。

【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/llguanli/p/8446287.html