前段时间,跟客户开个线上会议,在和对方技术人员讨论到如何把数据给我们的时候,对方说【丢给你们一个视图,你们查视图就好了】我一下子懵了。当时现场贼尴尬,我只能假装断线了,然后又模棱两可的说了几句,勉强把场子圆回来了。
话说回来,楼主虽然敲代码敲了很多年了,但是基本上没碰过多少sql。因为以前是游戏行业,管理后台基本上都是专门的人写的,我只是写游戏业务内容的。
想着以后避免再次遇到这种尴尬的场景,还是稍微花点时间学习一下【视图】这个东西吧。
视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表。
视图是从一个、多个表,或者其他视图中导出的表,包含一系列带有名称的数据列和若干条数据行。
它跟真实的数据库表有如下区别:
通过上面的基本介绍,我估计大家对视图应该有关大概的印象了。当然,想要更具体的了解,还要结合下面的【视图的基本操作】,这个我们后面再继续说。
那视图有什么作用呢?我们这里先大概写一下,现在不理解也无所谓,看了后面的【视图的基本操作】你肯定能了解了。
作用如下:
不过使用视图的时候,还应该注意以下几点:
我这边直接拿我们生产环境的表来做实验了。不过这边都是简单操作,更具体的东西还需要大家自己去了解。其实视图的操作,基本上跟表操作没啥两样,都是增删查改。
这边用到了3张表做基本操作演示,分别为:餐厅表(kitchen_canteen)、档口表(kitchen_stall)、经营报表(unify_report_stall)。具体表的定义我这边就不给了,我相信大家看了下面的sql代码基本也知道我想要干啥。
语法格式如下:
CREATE VIEW <视图名> AS <SELECT语句>
示例:
CREATE VIEW view_canteen_store_turnover AS
SELECT
kc.name AS canteenName,
ks.name AS stallName,
urs.biz_date AS bizDate,
urs.turnover
FROM
unify_report_stall urs
INNER JOIN kitchen_canteen kc ON urs.store_id = kc.id
INNER JOIN kitchen_stall ks ON urs.line_id = ks.id;
解析:我这边就是连了最开始说的3张表,获取餐厅名字,档口名字,以及档口营业额,组合成一个【商家营业额】视图。后续,我们就可以对这个视图直接做查询操作了,效果等同于上述的select查询片段。
查询上面的视图,跟普通查询是一样的,为了证明,我们用explain给大家看看。首先先看select的结果:
SELECT * FROM view_canteen_store_turnover;

看explain的结果:


看,explain的结果是一样的。
语法格式如下:
ALTER VIEW <视图名> AS <SELECT语句>
其实也可以不修改的,先删除,再重新创建也是一样道理。
语法格式如下:
DROP VIEW <视图名> [ , <视图名2> …]
PS:一次性可以删除多个视图
感谢小白教程的《Mysql教程》