22.1视图
视图是虚拟的表。
作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。
22.1.1为什么使用视图
在视图创建之后,可以用与表基本相同的方式利用它们。
视图仅仅是用来查看存储在别处的数据的一种设施。 视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。 在添加或更改这些表中的数据时,视图将返回改变过的数据。
使用视图存在性能问题。
22.1.2视图的规则和限制
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图
- 视图不能索引,也不能有关联的触发器或默认值
- 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句
22.2使用视图
- 视图用CREATE VIEW 语句创建
- 使用SHOW CREATE VIEW viewname; 来查看创建视图的语句
- 用DROP删除视图,其语法为DROP VIEW viewname;
- 更新视图时,可以先用DROP再用CREATE ,也可以直接用CREATE OR REPLACE VIEW ,如果想要更新的视图不存在,则第二条语句会创建一个视图,如果要更新的视图存在,则第二条语句会替换原有视图。
22.2.1利用视图简化复杂的联结
查询通过视图查询数据库中的数据。
创建可重用的视图,的方法之一就是扩展视图的范围。
22.2.2 用视图重新格式化检索出的数据
将查询出来的格式化数据创建视图,以后需要的话,直接从视图中查询数据。
22.2.3 用视图过滤不想要的数据
也是先通过一个查询过滤不想要的数据,然后以这个查询结果来创建视图,然后再在这个视图上进行查询。
22.2.4 使用视图与计算字段
将原本在一个查询中进行的计算,分类到生成视图的查询和视图的查询中,从而简化查询。
22.2.5 更新视图
通常,视图是可更新的(INSERT、UPDATE和DELETE),更新一个视图将更新基表。
如果视图定义了以下操作,则不能进行视图更新:分组(使用GROUP BY和HAVING);联结;子查询;并;聚集函数(Min()、Count()、Sum()等);DISTINCT;导出(计算)列
实际上视图主要用于数据检索。
22.3小结
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查 询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据 处理以及重新格式化基础数据或保护基础数据。