mysql(五) MySQL视图
文章目录
- mysql(五) MySQL视图
- MySQL视图
- 视图的创建
- 视图的使用
- 视图结构的修改
- 视图的删除
- 视图的增删改操作
- 视图和表对比
MySQL视图
概念 MySQL5.1版本出现的新特性,通过表动态生成的数据,只保留了sql语句,不保留查询结果.
如果要重复使用一个查询结果,但是这个查询结果需每次都需要通过查询语句生成,我们就可以创建一个临时的视图来绑定这个查询语句,每次使用都直接使用这个视图即可
注意
1. 视图只保留查询的语句(即逻辑代码),不保存数值
2. 视图中可以嵌套视图,即可以基于一个视图再创建一个视图
3. 虽然视图保存的是一个查询语句,但是每次调用视图,视图都会返回一个查询结果,即一个动态生成的表,所以我们完全可以把视图当做表来用
视图的创建
语法
#创建
create view <视图名> as <查询语句>;
举例 将 “查询姓张的学生名和专业名“ 封装成一个视图
#创建一个视图
create view v1 as
select 姓名,专业名
from 学生表 s
inner join 专业表 m on s.专业编号= m.专业编号
where s.姓名 like '张';
查看视图的结构
desc <视图名>;
或者像下面这样,这种方式比较适合在命令行下查看
\G
表示格式化,更方便查看,也可以不加,
show create view <视图名>\G;
视图的使用
语法
#使用
select <查询列表> from <视图名> ...
举例 查询姓张的同学的全部信息
#想要基于一个查询结果时时候,直接使用上面创建的视图就可以了
select * from v1 where 姓名 like '张%';
视图结构的修改
语法 1 如果视图存在,就修改,如果不存在,就创建,比较保险
create or replace view <视图名> as <查询语句>;
语法 2 这种方法前提是视图已经存在
alter view <视图名> as <查询语句>;
举例 既然视图基于select创建,说明查询的结果也可以进行一定的改变,就比如数据库的表中存储的是月薪,我们在视图中可以将其变为年薪,即月薪*12
create or replace view v2 as
select 姓名,月薪*12
from 员工表;
视图的删除
语法
drop view <视图名1>,<视图名2>,...,<视图名n>;
视图的增删改操作
上面我们说过,可以把视图当做一个表来看,所以视图不光有查询的功能,也有增删改的功能,但是视图的增删改需要注意一些事项,下面我们一一举例
- 通过视图插入信息
语法与插入语句一模一样
insert into <视图名>(<字段1>,<字段2>,...,<字段n>) values(<值1>,<值2>,...,<值n>);
注意
1. 插入语句仅限于视图的结构和原表格一样或者是原表的一部分,如果出现了视图的修改(就比如上面的,原表中是年薪,在视图中是月薪),这样就不可以通过视图插入
2. 如果想要通过视图插入,视图必须包含原表中所有的非空字段,因为视图中没有的字段插入时默认为空
- 通过视图更新表信息
语法与update一模一样,不光下面这种形式,其他形式的更新语句也可以
update <视图名> set<字段名>=<新值>;
注意
同插入语句一样,通过视图更新原表的内容时,视图的结构和原表格一样或者是原表的一部分,且必须包含原表的所有非空字段)
- 通过视图删除
语法与删除语句一样
delete from <视图名> [条件语句];
- 总结
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:
- 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或 者union all
- 常量视图(select 的内容是常量)
- select中包含子查询
- join,连接语句
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表,例如
SELECT last_ 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 | 保存数据 | 增删改查 |