视图

视图 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的两种算法

 

 

posted @ 2018-06-28 22:25  耐烦不急  阅读(223)  评论(0编辑  收藏  举报