视图 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;