20:mysql 视图

如果某个结果集 , 我经常要对它进行查询 , 挺麻烦的 , 每次要写一条sql语句,那么对于这个常用的结果集 , 我能不能把它存起来呢 ?例如:

  1. select goods_id,goods_name,(market_price-shop_price) as sheng from goods;

将上面的 sql 得到的结果集 , 存下来 , 以便我们下次从这个结果集中查询我们想要的数据;如何将这个结果集存储下来呢 ?

 

1、建视图

以下sql语句中vgoods 表的内容 , 就是上面 select 的结果集;

  1. create view vgoods as select goods_id,goods_name,(market_price-shop_price) as sheng from goods;

 

2、 视图的概念

view 又被成为虚拟表 ,view 是 sql 语句的查询结果;也可以说 它是表到结果的映射一个 sql 的查询结果 , 我用 view 存起来,下次你查这个 view, 就相当于这个 sql 发挥作用了;

 

3、视图有什么好处呢 ?

(1):权限控制时可以用

比如 , 某几个列 , 允许用户查询 , 其他列不允许查询,可以通过视图 , 开放其中一列或几列 , 起到权限控制的作用;例如:我们只能让规定用户查询到 goods 表的 goods_id,goods_name,shop_price;

  1. create view v2goods as select goods_id, goods_name,shop_price from goods;
  2. select * from v2goods;

这样权限控制以后,任你怎么查询 v2goods 表也无法得到 market_price这个列;

 

(2):简化复杂的查询

我们可以先将内层 select 语句的查询结果转为视图,在通过视图查询我们具体想要的内容;例如:查询goods表每个栏目下商品的平均价格 , 并按照平均价格排序 , 查出前三高的商品的栏目

 

1) 我们先查出每个栏目下商品的平均价格

  1. select cat_id,avg(shop_price) as pj from goods group by cat_id;

 

2) 在从上面 sql 得到的结果集中 desc 排序 , 取前三行即可

  1. select * from (select cat_id,avg(shop_price) as pj from goods group by cat_id) as tmp order by pj desc limit 0,3;

 

3) 通过 view 我们可以简化上面的 sql

  1. create view pingjun as select cat_id,avg(shop_price) as pj from goods group by cat_id;
  2. select * from pingjun order by pj desc limit 0,3;

 

4、视图是什么?

view 就是你储存好的一条 sql 的查询结果;对于我们来说,视图就是一张透明的表,我们并不能去看这是视图还是表;用show tables;可以看到我们的视图 , 也是存在的 , 我们都区分不出来它是表还是视图;

 

5、视图可以更改 ,可以 删除吗?

视图可以删除,但是不能修改;因为视图是sql结果集,它的数据都是来源于物理表(主表)的,如果物理表发生了变化,视图表也会发生变化;但是你却不能修改视图表从而来影响物理表;

 

视图SQL管理语句

 

1、查看所有视图

除了显示视图,连表也会显示出来;这命令其实就是显示所有表的命令;视图它本身就相当于是表;

show tables;

 

2.、查看视图结构

desc 视图名

 

3、查看建视图过程

show create view 视图名

 

4、删除视图

drop view 视图名

 

7.、查看库中的表/视图信息

如果表信息太多 , 看不清楚 可以加上 \G 竖着显示;

show table status;

show table status \G;

 

8、查看某张表是否是视图

如果是视图 : Comment: VIEW

如果不是视图 : Comment

show table status where name='表名';

show table status where name='表名' \G;

mysql查看表是否是视图

    A+
发布日期:2017年01月18日 19:44:11  所属分类:mysql教程
最后更新时间:2017-01-18 19:44:59
付杰
  • ¥ 59.8元
  • 市场价:99.8元
  • ¥ 999.0元
  • 市场价:1599.0元
  • ¥ 99.0元
  • 市场价:129.0元
  • ¥ 818.0元
  • 市场价:1688.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: