视图
视图 view
在查询中,我们经常把查询结果 当成临时表来看.
View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影.
既然视图只是表的某种查询的投影,所以主要步骤在于查询表上.
查询的结果命名为视图就可以了.
视图的定义:
视图是由查询结果形成的一张虚拟表.
视图的创建语法:
Create view 视图名 as select 语句;
视图的删除语法:
Drop view 视图名
注意:show tables也可以查询到视图
为什么要视图?
答:1:可以简化查询。
比如查询每个栏目下商品的平均价格,并按平均价格排序,查出平均价前三高的栏目:
2: 可以进行权限控制
把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据
3: 大数据分表时可以用到
比如,表的行数超过200万行时,就会变慢,
可以把一张的表的数据拆成4张表来存放.
News表
Newsid, 1,2,3,4
News1,news2,news3,news4表
把一张表的数据分散到4张表里,分散的方法很多,
最常用可以用id取模来计算.
Id%4+1 = [1,2,3,4]
比如 $_GET['id'] = 17,
17%4 + 1 = 2, $tableName = 'news'.'2'
Select * from news2 where id = 17;
还可以用视图, 把4张表形成一张视图
Create view news as select from n1 union select from n2 union.........
视图的修改
Alter view 视图名 as select xxxxxx
视图是表的一个影子.
表与视图,数据变化时的相互影响问题.
视图与表的关系
视图是表的查询结果,自然表的数据改变了,影响视图的结果.
视图改变了呢?
0: 视图增删改也会影响表
1: 但是,视图不是总能增删改的.
视图某种情况下,是可以修改的.
要求: 视图的数据和物理表的数据一一对应. 就像函数的映射.
表-->推出视图对应的数据
视图-->推出表对应的数据
对于视图insert还应注意,
视图必须包含表中没有默认值的列.
以这个例子而言,平均价来自于多行的的shop_price的计算结果.
如果pj列的值的变子,映射过去,到底修改哪几行shop_price?
注:下边的v3虚拟表与stats虚拟表是同一个表
merge和temptable为algorithm的两种算法