视图:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果
应用场景:
- 多个地方用到同样的查询结果
- 该查询结果使用的sql语句较为复杂
创建视图:
# 创建视图 create view myv1 as select last_name, department_name, job_title from employees e join departments d on e.department_id = d.department_id # 使用视图和使用表一样,就是一个临时表 select * from myv1
视图的修改:
# 方式一: create or replace view 视图名 as 查询语句 create or replace view myv1 as select avg(salary), job_id from employees group by job_id; # 方式二: alter view 视图名 as 查询语句 alter view myv1 as select avg(salary), job_id from employees group by job_id;
删除视图:
# 可以同时删除多个视图 drop view 视图名、视图名,...;
查看视图:
# 方式一 desc myv1; # 方式二 show create view myv1;
# 视图并不会占用新的物理空间,只是保存了运算过程的逻辑 # 首先创建一个视图,然后插入一个数据,在查看该视图数据会进行更新 create view myv1 as select * from boys; insert into boys VALUES(2, "Jack", 30); select * from myv1;
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:
- 分组函数、distinct、group by、having、union或者union all
- 常量视图
- select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表