前言
最后八天,加油~
视图
视图,很熟悉又很陌生的一个词。那么什么是视图呢?你可以把它理解成一个表。
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
是什么意思呢?我们可以把它看成一个表,但是这个表是虚拟的,也就是说这个表里面是没有数据的,那么它有什么呢?它只有一系列的查询语句。
为什么使用视图
视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。
视图的规则和限制
#使用视图
利用视图简化复杂的联结
前面我们提到了,视图只包含一系列查询,所以我们可以视图来简化复杂的联结。
视图的最常见的应用之一是隐藏复杂的SQL,这通常都会涉及联结。
看下面的例子
上面的例子就是创建了一个视图,视图的创建的语法其实比较简单,规则如下。
create view 视图的名字 as
select 语句;
我们知道视图是一个虚拟的表,那么这个表大致长什么样呢?我们可以从软件的视图选项中看到。
然后我们就可以对这个虚拟的表进行查询等等操作了。比如:
用视图重新格式化检索出的数据
视图的另一常见用途是重新格式化检索出的数据。
我们回忆一下之前的学习的计算字段
现在,假如经常需要这个格式的结果。不必在每次需要时执行联结,创建一个视图,每次需要时使用它即可。为把此语句转换为视图,可按如下进行:
这样我们就得到了一个视图,之后每次对这个视图进行操作就可以了。
用视图过滤不想要的数据
视图对于应用普通的WHERE子句也很有用 。
使用视图与计算字段
更新视图
通常,视图是可更新的(即,可以对它们使用INSERT、 UPDATE和DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。
但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数( Min()、 Count()、 Sum()等);
DISTINCT;
导出(计算)列。
换句话说,本章许多例子中的视图都是不可更新的。这听上去好像是一个严重的限制,但实际上不是,因为视图主要用于数据检索。