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 <视图名> [条件语句];
  • 总结

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:

  1. 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或 者union all
  2. 常量视图(select 的内容是常量)
  3. select中包含子查询
  4. join,连接语句
  5. from一个不能更新的视图
  6. 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保存数据增删改查
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值