一、前言
mysql中的视图概念虽然在工作应用中不是必不可缺的,但是合理地使用视图,对开发能起到很好的辅助作用。
二、概念
视图简而言之就是存储查询语句的一个虚拟表。
三、应用场景
1、做表的权限限制可以应用。工作中存在很常见的一个工作场景时,开放数据库中的部分表字段给第三方,但是某些表中又有一些敏感的字段不能开放,那么能应用的解决方案有
一、开发接口,二、建立中间表,第一种无疑是增加了很多的工作量,第二种又增加了资源的消耗。而能够利用视图则很好的解决了这个场景带来的问题。
2、简化复杂的查询操作。对于一些复杂的查询操作,如果用一条语句来执行,语句的可读性可能会大大减低,如果能引入视图的概念,则能较好的把复杂的语句化整为零。
四、使用
存在表users:
1、创建视图
create view vuser as select id name from users;
语法:
create view 视图名称 as 查询语句;
当你查询数据表列表时,就会发现出现了vuser这张虚拟表
针对场景一,如果你只想开放用户表的姓名给第三方开发者,则只开放虚拟表即可
针对场景二,如果需要你查询出所有班级的年龄平均值之和。可以建立视图如下
create view avg_age_user as select class_id,avg(age) as avg from users group by class_id
创建视图如下
执行语句,即可得出结果
如此在应用场景中,就不必写长语句来进行查询了
备注:而创建视图有两种算法,一种是merge(合并),另一种是temptable(临时表),我们已经了解到视图即使存储查询语句的虚拟表,那么使用merge算法就是将视图的查询语句和查询视图的语句合并得到了查询物理表的语句然后去物理表查询
而temptable即是首先执行视图的查询语句得到结构集作为临时表,然后执行查询视图的语句去查询临时表。如果没有加algorithm,则有数据库引擎自身判断。
语法:
create algorithm = merge view avg_age_user as select class_id,avg(age) as avg from users group by class_id
create algorithm = temptable view avg_age_user as select class_id,avg(age) as avg from users group by class_id
2、删除视图
drop view vuser
语法:
drop view 视图名
五、特点
1、如果视图的每一行是与物理表,一一对应的,则可以通过修改视图达到增删改物理表的效果,当视图的记录是经过物理表运算统计得到的结果则无法,通过修改视图达到增删改物理表。
2、视图的建立和删除,只对视图本身有影响,而不对物理表有影响
六、结语
在开发中,能合理地配合上视图的使用,无疑是一个优雅的处理方式。