您的位置:首页 > 博客中心 > 数据库 >

mysql---视图

时间:2022-03-15 21:20

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

语法:

create view 视图名 as select语句。

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

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

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


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

技术分享图片

如今创建一个求各个学生平均成绩的视图

技术分享图片

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

技术分享图片

再看看视图的内容

技术分享图片

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


视图改变会改变表吗?

这不一定。假设视图和表是以一个相应的,即f(x,y)能够反得到x,y(类似反函数关系)。

这样的情况下。视图改变会影响原有表。

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

技术分享图片


视图有三种实现方式

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

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

技术分享图片

如今要求平均分前三高的学生,能够直接引用视图来查询

技术分享图片

假设algorithm设置为merge

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

技术分享图片

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

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


视图的作用

(1)方便操作:假设要经经常使用到某个暂时表时,比方上面的平均分视图。假设未定义视图,每次都须要求平均分暂时表。再去对暂时表进行查询。有视图就非常方便。直接查询视图就能够了。

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

热门排行

今日推荐

热门手游