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

Heim > Datenbank > MySQL-Tutorial > mysql---视图_MySQL

mysql---视图_MySQL

WBOY
Freigeben: 2016-05-31 08:50:29
Original
1277 Leute haben es durchsucht

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

语法:

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”,“数学成绩”,“语文成绩”,“英语成绩”。

mysql---视图_MySQL

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

/

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

/

再看看视图的内容

/

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

视图改变会改变表吗?

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

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

/

视图有三种实现方式

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

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

/

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

/

如果algorithm设置为merge

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

/

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

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

视图的作用

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

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

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage