视图
视图是一种虚拟存在的表,是个逻辑表,本身不包含数据,只保存了sql逻辑,不保存查询结果。行和列数据来自自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 应用:多个地方用到同样的查询结果;该查询结果使用的sql语句比较复杂。
#创建视图 /* CREATE VIEW 视图命 AS 查询语句 */ CREATE VIEW v1 AS SELECT stu_name,majorname FROM stu_info s INNER JOIN major m ON s.major_id = m.id #使用视图 SELECT * FROM v1 #修改视图 /* 方式一: CREATE OR REPLACE VIEW 视图名 AS 查询语句 方式二: ALTER VIEW 视图名 AS 查询语句 */ #删除视图 /* DROP VIEW 视图名; */ #查看视图 /* DESC 视图名; SHOW CREATE VIEW 视图名; */
视图的更新
视图的更新与视图中的查询的定义有关系。以下类型视图不能更新:
- 包含关键字:分组函数、distinct、group by、having、union、union all
- 常量视图
- select中存在子查询
- join
- from一个并不能更新的视图
- where子句的子查询引用了from子句中的表
视图优点
安全:一些数据表存有重要信息。有些字段不能给用户直接看到。可以创建一个视图,只保留给用户查看的字段。
性能:关系数据库的数据经常会采用分表存储,使用外键建立这些表的之间关系。数据库查询通常采用join连接。可以使用视图将相关的表和字段组合在一起,这样可以避免使用join查询数据
灵活:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。