- 问题 对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦
解决办法:定义视图
- 视图是什么? 视图是从一个或者多个表的查询结果导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询,与直接操作基本表相比,视图具有一下有点
- 简化了查询的语句:视图不经可以简化用户对数据的理解,也可以简化对数据的操作。日常开发中可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作
- 安全性:通过视图用户只能查询和修改他们所能看到的数据,数据库中的其他数据则即看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对像上,但不能授权到数据库特定的行和列上
- 视图帮我们屏蔽了真实表结构变化带来的影响
简单来说:
- 提高了重用性,简化了查询
- 对数据库重构,却不影响程序的运行
- 提高了安全性能,可以对不同的用户(只对用户开放部分列)
- 让数据更加清晰
定义视图
DeepinScrot-2213 DeepinScrot-2123- 建议以v_开头
create view 视图名称 as select语句;
如何创建一张临时表
create algorithm=temptable view 视图名称 as select语句;
DeepinScrot-3116- 查看视图
查看表会将所有的视图也列出来
show tables;
DeepinScrot-2538- 使用视图
视图的用途就是查询
select * from v_stu_score;
DeepinScrot-3229- 查看视图的创建语句
- 修改视图
ALTER VIEW 视图名称 AS select ..
- 更新视图数据
UPDATE 视图名称 SET 字段=值
DeepinScrot-4338- 删除视图
drop view 视图名称; 例: drop view v_stu_sco;
DeepinScrot-5629注意: 并非所有视图都是可更新的。基本上可以说,如果MySQL不 能正确地确定被更新的基数据,则不允许更新(包括插入和删除) 。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:
-
分组(使用 GROUP BY 和 HAVING )
-
联结;
-
子查询;
-
并;
-
聚集函数( Min() 、 Count() 、 Sum() 等);
-
DISTINCT
-
导出(计算)列。
注意:视图的作用常常用来检索,而不是修改数据。
网友评论