day13:视图
视图:MySQL从5.0.1版本开始提供视图功能。一种虚拟 存在的表,行和列的数据来自定义视图的查询中使用的表 ,并且是在使用视图时动态生成的,只保存了sql逻辑,不 保存查询结果
应用场景:
– 多个地方用到同样的查询结果
– 该查询结果使用的sql语句较复杂
视图的好处:
• 重用sql语句
• 简化复杂的sql操作,不必知道它的查询细节
• 保护数据,提高安全性
一、创建视图的语法:
create view 视图名称
as
查询语句;
一般是比较复杂的查询语句,简单的就没必要用视图了
例如:查询员工姓名是张三的部门名称
1、创建视图查看所有员工的姓名以及对应的部门名称
create view myvi AS SELECT ename,dname FROM employee e INNER JOIN department d ON e.departmentid = d.id;
2、使用
select * from myvi where ename='张三';
二、修改视图的语法:
方式一:
create or replace view 视图名
as
查询语句;
例如:修改视图myvi
create or replace view myvi as select ename,dname,pay from employee e inner join department d on e.departmentid=d.id;
方式二:
alter view 视图名
as
查询语句;
例如:修改视图myvi
alter view myvi as select ename,dname from employee e inner join department d on e.departmentid=d.id;
三、删除视图的语法:
用户可以一次删除一个或者多个视图,前提是必须有该视图的drop权限。
drop view 视图名,视图名,...;
例如:删除视图myvi
drop view myvi;
四、查看视图的语法:
desc 视图名;
视图的可更新性和视图中查询的定义有关系,以下类型的 视图是不能更新的。
• 包含以下关键字的sql语句:分组函数、distinct、group by 、having、union或者union all
• 常量视图
• Select中包含子查询
• join
• from一个不能更新的视图
• where子句的子查询引用了from子句中的表