虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。下面是视图常用的一些应用:
1.重用SQL语句。
2.简化复杂的SQL操作。在编写查询后,可以方便的重用它而不必知道它的基本查询细节。
3.使用表的组成部分而不是全部。
4.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
5.更改数据格式和表示。视图可以返回与底层表的表示和格式不同的数据。
视图创建之后,可以用与表的基本相同的方式利用它们,可以对视图执行SELECT操作、过滤和排序操作,将视图联结到其他视图或者表,甚至可以添加或者更新数据(这个存在限制)。
性能问题:因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所必需的的任何一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降的很厉害。因此,如果部署使用了大量视图的应用前,应该进行测试。
视图的规则和限制:
1.与表一样,必须给视图名唯一命名。
2.对于刻意创建的视图数目没有限制
3.为了可以创建视图,必须具有足够的访问权限,这些一般都是数据库管理人员授予的。
4.视图可以嵌套,即可以利用从其他视图中检索的数据的查询来构造一个视图。
5.ORDER BY可以用在视图中,但如果从该视图检索数据的SELECT语句中也包含ORDER BY,那么该视图中的ORDER BY将覆盖。
6.视图不能索引,也不能有关联的触发器和默认值。
7.视图可以和表一起使用。
视图的使用:
1.使用:CREATE VIEW语句来创建。
2.使用SHOW CREATE VIEW viewname,来查看创建视图的语句。
3.用DROP删除视图,其语法为DROP VIEW viewname.
4.更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE ORREPLACE VIEW。如果要更新的视图不在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。
更新视图:
通常视图是可以更新的(即,可以对它们使用INSERT、UPDATE和DELETE)。更新一个视图将更新其基表(视图本身没有数据)。如果对视图增加或者删除行,实际上是对基表增加或者删除行。
但是,并非所有的视图都是可以更新的。基本上可以说,如果MySQL不能正确的确定被更新的基数据,则不允许更新(包括插入和删除)。这实际意味着,如果视图定义中存在以下操作,则不能对视图进行更新:
1.分组(使用GROUP BY和HAVING)
2.联结;
3.子查询;
4.并;
5.聚集函数(Min()、Count()、Sum()等);
6.DISTINCT();
7.导出(计算)列;
这些听上去好像是一个严重的限制,但实际不是,因为视图主要是用来数据检索。