视图

视图 view
在查询时,我们经常
如何创建试图,建视图的时候,不需要指定视图的列名和列类型,视图就是一种关系,可以说视图是表的影子,它随着查询表的内容的改变而随时更新。
视图的语法:视图可以当成表看
create view 视图名 as
(select * from 其他表名)查询语句,
视图有什么用呢
1,可以简化我们的查询
比如,进行复杂的统计时,先用视图生成一个中间结果,再查询视图

2,更精细的权限控制
比如,两个网站合作,可以查询对方的用户,需要向对方开放用户表的权限,但是又不想开放用户表的密码字段。
可以创建一个视图,去掉密码字段,然后开放这个视图给对方

2,数据多,分表是可以用到
比如 有一系列表,需要在这些表中查询数据,可以将这些表用视图合并,再对这个视图进行查询,就不用对多个表分别查询
create view art as
select title from art1 union select title from art2 union select title from art3 union ...union select title from artn;

视图在某种情况下显示可以修改的
要求视图中的数据和表中的数据是一一对应的关系,就像函数中的映射。

视图algorithm的使用
相对于建临时表,合并的查询速度更快
建表:查询-->形成临时表-->查询临时表
叠加:合并条件-->查询表
algorithm=merge合并查询
          temptable临时表
          undefined未定义,由系统判断

#建一张简单的查询视图,不用临时表,只用条件合并
create view v1
as
select goods_id,cat_id,goods_name,shop_price from goods where shop_price>300;
#查询视图
select goods_id,cat_id,goods_name,shop_price from v1 where shop_price<500;

+----------+--------+------------+------------+
| goods_id | cat_id | goods_name | shop_price |
+----------+--------+------------+------------+
|        8 |      3 | 飞利浦9@9v       |     399.00 |
+----------+--------+------------+------------+
1 row in set (0.02 sec)

#对于这种简单的查询,不需要建立临时表
create algorithm=merge view v2
as
select goods_id,cat_id,goods_name,shop_price from goods where shop_price>300;
#查询视图
select goods_id,cat_id,goods_name,shop_price from v2 where shop_price<500;

+----------+--------+------------+------------+
| goods_id | cat_id | goods_name | shop_price |
+----------+--------+------------+------------+
|        8 |      3 | 飞利浦9@9v       |     399.00 |
+----------+--------+------------+------------+
1 row in set (0.00 sec)

#用时短了很多
有的情况不能够直接合并,那就建立临时表,如下例:
create algoithm=temptable view v3
as 
select goods_id,cat_id,goods_name,shop_price
from goods order by cat_id asc,shop_price desc;

#查询
select * from group by cat_id;
原文地址:https://www.cnblogs.com/lzzhuany/p/4671977.html