1、视图的定义
view是什么?view可以看出一张虚拟表,通过某种运算得到的一个投影。
2、视图的创建语法
create view 视图名 AS select 语句 from 某个表;
举例如:
create view stats as select cat_id,avg(shop_price) as pj from goods group by cat_id;
3、视图的作用
(1)简化查询过程。比如复杂的统计,可使用视图生成中间结果,再查询视图;
(2)可以精细的权限控制。比如某张表,用户表为例,现在两个网站搞合作,可以查询对方网站的用户,需要向对方开放用户的权限,但是不想开放用户表中的密码字段。
create view vuser AS select user_id,username,email from uesr ; 可以通过开放视图的权限给对方。
(3)数据多,分表时可以用到。比如小说站,artical 表,1000多万篇,分成artical1、artical2、…artical5这五张表中,每张表200万条,查询小说时,不知道查询哪张表。
4、视图与表之间的关系
视图是表的一个影子,那么表与视图数据变化时的相互影响问题。
(1)表的数据变化会影响到视图的数据变化。
我们将good表中的某个商品的shop_price进行更改,则视图中的值也发生更改。这里没有截图,之前视图中的cat_id=15的商品均值为60,现在变化为80,这里忘了截图说明。
以这张表为例,均价来源多行数据(shop_price)的计算结果,如果pj列的值发生变化,映射过去,到底在goods表中的哪几行shop_price?
所以当前视图无法更改!!!
(2)视图某种情况下,视图可以更改,视图更改,表也发生更改。这种情况是视图与表的数据一一对应才行。也就是表可以推出视图,视图也可以推出表,视图相当于函数的映射。
5、视图的应用
练习:查询每个栏目下商品的平均价格,并取前三高的栏目
(1)未学习视图时,我们使用的sql语句为:select cat_id,avg(shop_price) as pj from goods group by cat_id order by pj desc limit 3;
但是当我们频繁使用这些表的属性时,创建一张视图就显得尤为重要了.
(2)使用视图
create view stats as select cat_id,avg(shop_price) as pj from goods group by cat_id;
在view的基础上:查询每个栏目下商品的平均价格,并取前三高的栏目!
select * from stats order by pj limit 3;
显然是视图就是表的一个影子,不过这个影子仿佛更加简单,但是在增删改的时候特别注意我上面说到的表与视图的关系。
mysql中的视图
最新推荐文章于 2024-08-10 22:30:15 发布