视图
虚拟表,和普通表一样使用
MySQL5.1版本出现的新特性,是通过表动态生成的数据
视图的好处
- 重用sql
- 简化复杂的sql操作,不必知道查询细节
- 保护数据,提高安全性
使用场景
- 多个地方用到同样的查询结果
- 该查询结果使用的sql语句较复杂
案例
查询姓张的学生名和专业名
select stuname,majorname
from stuinfo s
inner join major m on s.majorid=m.id
where s.stuname like '张%';
#创建视图
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 '张%';
视图的修改
方式一
create or replace view 视图名
方式二
alter view 视图名
as
查询语句;
删除视图
drop view 视图名,视图名..;
查看视图
desc 视图名
show create view 视图名\G;
视图的更新
视图的更新会改变原表的数据
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的
- 包含关键字:分组函数、distinct、group by、having、union、union all
- 常量视图
- select中包含子函数
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
create or replace view v1
as
select name,email,salary
from employees
where employee_id in(
select manager_id
from employees
where manager_id is not null
);
视图和表的区别
- | 创建语法的关键字 | 是否实际占用物理空间 | 使用 |
---|---|---|---|
视图 | create view | 只保存sql逻辑 | 增删改查,一般不能删改 |
表 | create table | 保存了数据 | 增删改查 |