Mysql之进阶宝典系列-视图

Mysql之进阶宝典系列-视图

一、视图是什么(what)

  视图本质上是一个虚表,在数据库中不实际存在,它的所有数据来源于查询中所使用的表的数据,而且是在视图调用过程中动态生成的。视图只保存了SQL查询的逻辑,不保存SQL查询的结果

二、视图的作用(why)
  1. 简化用户操作

    ​  经常使用的数据库查询语句可以被定义为视图,方便用户的操作,在定义视图时,可以根据具体功能定义视图名称,方便用户的理解。

  2. 数据安全

    ​  数据库层面上不能授权到特定的行和列数据上,通过视图用户只能查询和修改被容许访问的行和列的数据。

  3. 数据独立

    ​  视图可以屏蔽数据库真实表结构的变化。

三、视图的实现(how)

 因为视图只保存SQL查询逻辑,不保存SQL查询结果的特性,对视图进行操作时,主要工作落在SQL查询语句上。

  1. 创建视图
   create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

  1. 删除视图
  drop view  [if exists] 视图名称;

在这里插入图片描述

  1. 修改视图

    两种方法

  1.create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

   2.alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option];

在这里插入图片描述

  1. 查询视图

查询视图创建语句

   show create view 视图名称;

Mysql之进阶宝典系列-视图_第1张图片

查询视图中的数据

  select 列表字段名称 from 视图名称 查询条件;

在这里插入图片描述

注意:以上视图实现语句中,**[]**里内容表示是非必填项

四、视图使用进阶
  1. 视图的检查选项

  视图的主要是用于SQL查询语句,那么能否通过视图实现数据库中数据表数据的增加、删除和修改,答案是必须的,但是因为创建视图时指定的查询语句可能带有where查询条件,会出现数据库的表中可以实现数据的增加、删除、和修改,但是在视图中体现不出来,视图的检查选项就是可以一定程度上避免这个问题。
  上面创建视图等语句中出现的with[cascaded|local] check option,即是检查选项在SQL语句的体现,使用with check option创建视图时,Mysql会去检查每个更改的行,即发生增加、删除、修改的数据行,以符合视图的定义。
  需要特别注意的时,Mysql允许基于一个视图去创建另一个视图,并会检查依赖视图中的规则以保持一致性,Mysql提供两个参数来区分检查范围:cascadedlocal,默认是cascaded。

  • cascaded
    如下图,视图v2是基于v1构建的,但是v2设置了检查选项为cascaded,v1没有设置检查选项,在执行检查时,不仅会检查v2,还会检查v1,即子视图设置检查选项为cascaded,不管其父视图是否设置了检查选项,都会级联检查父视图
    Mysql之进阶宝典系列-视图_第2张图片

  • local
    如下图,视图v2是基于v1构建的,但是v2设置了检查选项为local,v1没有设置检查选项,在执行检查时,只会检查v2,不会检查v1,即子视图设置检查选项为local,不会级联检查父视图
    Mysql之进阶宝典系列-视图_第3张图片

  1. 视图的更新

    要是视图可更新,必须保证视图中的行与基础表中的行保持一对一关系,如果视图包含以下任何一项,视图即不可更新。

    • distinct

    • group by

    • having

    • union 或 union all

    • 聚合函数或窗口函数(sum(),max()等)

     create view stu_count as select count(*) from smbms_user;

  上述语句得到的结果是单行和单列的,与基础表中的行没有保持一对一关系,对此视图修改时,会出错。在这里插入图片描述

你可能感兴趣的:(Java,mysql,数据库)