来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] 视图是一张虚拟的表,并没有实际存储数据,存储的是一种函数关系。语法:create view 视图名 as select语句;为什么说视图存储的是一种函数关系?当引用视图时,它会根据这种关系到创...
视图是一张虚拟的表,并没有实际存储数据,存储的是一种“函数关系”。 语法: create view 视图名 as select语句; 为什么说视图存储的是一种函数关系? 当引用视图时,它会根据这种关系到创建视图的各个表中去寻找相关字段,并按照这种关系进行运算得到结果。所以视图不需要存储数据,只需要存储这种“函数关系”。 如表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)安全考虑:如果两个公司合作,需要开放双方的一些用户信息,但是又不想公布一些涉及隐私或机密的信息(如用户密码),可以生成不包含密码字段的视图给对方。对方直接使用视图即可满足要求。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com