【MySQL和数据库】MySQL & database 第七章:视图的学习

MySQL和数据库系列文章目录

【MySQL和数据库】MySQL & database 第一章:数据库的安装与卸载
【MySQL和数据库】MySQL & database 第二章:数据库与MySQL的基本概述
【MySQL和数据库】MySQL & database 第三章:DQL学习(主要是记录的查询)
【MySQL和数据库】MySQL & database 第四章:DML学习(主要是对记录的增删改)
【MySQL和数据库】MySQL & database 第五章:DDL学习(主要是对库、表、字段的增删改)
【MySQL和数据库】MySQL & database 第六章:TCL学习(主要是针对事务的控制)
【MySQL和数据库】MySQL & database 第七章:视图的学习
【MySQL和数据库】MySQL & database 第八章:MySQL中的变量
【MySQL和数据库】MySQL & database 第九章:存储过程的学习
【MySQL和数据库】MySQL & database 第十章:函数的学习
【MySQL和数据库】MySQL & database 第十一章:流程控制结构



视图的概念

  • 含义:
    MySQL 从 5.0.1版本开始提供视图功能;
    一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存sql逻辑,不保存查询结果

  • 应用场景:

    • 多个地方用到同样的查询结果;
    • 该查询结果使用的sql语句比较复杂;
  • 特点:

    • 重用sql语句;
    • 简化复杂的sql操作,不必知道它的查询细节;
    • 保护数据,提高安全性;
  • 视图与表的区别

		创建语法的关键词		是否实际占用物理空间		使用
视图       create view            只是保存了sql逻辑        增删改查,一般只用查
表         create table           保存了数据              增删改查

视图的创建

  • 语法:

    #视图的创建
    create view 视图名
    as
    多条sql语句;
    #视图的使用
    select * from 视图名;
    

视图的修改

  • 方式一:

    create or replace 视图名
    as
    多条sql语句;
    
  • 方式二:

    alter view 视图名
    as
    多条sql语句;
    

视图的删除

drop view 视图名1,视图名2,...;

视图的查看

  • 方法一:

    desc 视图名;
    
  • 方法二:

    show create view 视图名;
    #如果在终端上,可以规范格式;
    show create view 视图名\G;
    

视图的更新

  • 具备以下特点的视图不允许更新

    • 包含以下包含以下关键词的 sql 语句:

      • 分组函数;
      • distinct;
      • group by;
      • having;
      • union、union all;
    • 常量视图

      create view myv
      as
      select 'john' as `name`;
      
      update myv set `name` = 'lucy'; #更新失败;
      
    • select 后面包含 子查询

      create view myv
      as
      select (select max(salary) from employees) as max_salary;
      
      update myv set max_salary = 10000; #更新失败;
      
    • 使用了 join 关键词

      create or replace myv
      as 
      select last_name, department_name
      from employees em
      inner join departments de
      on em.department_id = de.department_id;
      
      update myv set last_name '张飞' where last_name = 'Whalen'; #更新成功,特例;
      insert into myv values ('陈真', 1000); #更新失败;
      
    • from 后面接入一个不能更新的视图

      create view myv1 
      as
      select max(salary) max_sal, department_id
      from employees
      group by department_id; #出现 group by 不能更新视图;
      
      create view myv2
      as
      select * from myv1;
      
      update myv2 set max_sal = 1 where department_id = 10; #更新失败;
      
    • where子句 存在子查询,且该子查询引用了 外部from子句中的同一个表

      create view myv
      as
      select last_name, email, salary
      from employees
      where emplyee_id = (
      	select manager_id
          from employees
          where manager_id is not null
      );
      
      update myv set salary = 10 where last_name = 'Hunold'; #更新失败;
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值