视图
含义:虚拟表,和普通表一样使用
mysql5.1版本出现的新特性,是通过表动态生成的数据
视图是一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时
动态生成的,只保存sql逻辑,不保存查询结果。
优点:
简单化
安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加对视图没有影响;
源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
缺点:
性能相对较差,简单的查询也会变得稍显复杂
修改不方便,特别是复杂的聚合视图基本无法修改
总的来说还是不建议使用视图
视图与表的对比
创建语法的关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 增删改查,一般不能增删改查
表 create table 保存了数据 增删改查
应用场景:
-多个地方用到同样的查询结果
-该查询结果使用的sql语句比较复杂
create view v1 as select stuname,majorname from stuinfo s inner join major m on s.majorid=m.id; select * from v1 where stuname like '张%';
一、创建视图
use myemployees; #1.查询邮箱中包含a字符的员工名、部门名和工种信息 create view myv1 as select last_name,department_name,job_title from employees e join departments d on e.department_id=d.department_id join jobs j on j.job_id=e.job_id; #2.查询各部门的平均工资级别 create view myv2 as select avg(salary) ag,department_id from employees group by department_id; #使用 select myv2.ag,g.grade_level from myv2 join job_grades g on myv2.ag between g.lowest_sal and g.highest_sal; #3.查询平均工资最低的部门信息 create view myv3 as select * from myv2 order by limit1;
二、视图的修改
方式一: alter view 视图名 as 查询语句 alter view myv3 as select * from employees; 方式二: create or replace view myv3 as select avg(salary),job_id from employees group by job_id;
三、视图的删除
drop view myv1,myv2;
四、视图的查看
desc myv3; show create view myv3;
五、视图的更新
视图一般不更新