• 搞定这些问题,你就搞定了MySQL的视图


    问题陈列

    1、视图的定义是什么?
    2、创建视图的语法是什么?能否根据现有视图生成新的视图?
    3、修改视图的语法
    4、删除视图的语法
    5、怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?
    6、基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?
    7、基于多表生成的视图中,能否进行insert、update、delete操作?
    8、视图的作用是什么?
    9、其它问题:
    (1)视图可以加索引吗?
    (2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?

    问题1 视图的定义

    视图的定义是什么?
    简单来讲,视图就是一个虚表,它里面行和列存储的数据都对应数据库中的一个表或多个表。

    问题2 创建视图

    创建视图的语法是什么?能否根据现有视图生成新的视图?
    创建视图的语法:

    create view [视图名称] as [select查询语句] ;
    
    • 1

    举例:

    create view v1 as select id,name from user;
    
    • 1

    可以根据现有视图生成新的视图。

    create view v1 as select id,name from user;
    create view v2 as select name from v1;
    
    • 1
    • 2

    问题3 修改视图

    修改视图的语法

    alter view [视图名称] as [select查询语句] ;
    
    • 1

    问题4 删除视图

    drop view  if exists [视图名称] ;
    
    • 1

    注:if exists 可以省略

    问题5 视图与检查选项

    怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?
    (1)创建视图时在后面添加with cascaded check option或者with local check option;
    (2)两种。
    (3)默认是with cascaded check option。
    (4)区别:
    想创建两个视图,一个是v1,一个是v2,v2基于v1生成。
    create view v1 as select id,name from student where id<=10;
    create view v2 as select id,name from v1 where id>=5 ;
    当检查选项为cascaded时
    create view v1 as select id,name from student where id<=10;
    create view v2 as select id,name from v1 where id>=5 with cascaded check option;
    当在v2插入数据时,插入的数据id必须在5-10之间。

    当检查选项为local时
    create view v1 as select id,name from student where id<=10;
    create view v2 as select id,name from v1 where id>=5 with local check option;
    当在v2插入数据时,插入的数据id>=5即可。
    说明
    cascaded级别,在v2进行数据操作,必须要满足v1的条件,无论v1有没有设置检查选项;
    local级别,在v2进行数据操作,如果v1设置了检查选项,则满足v1的条件,如果v1设置没有,则忽略v1的条件。

    问题6 单表视图与增删改操作

    基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?
    可以进行insert、update、delete操作。
    当生成视图的SQL语句中存在以下任意一个条件时,都不可以:
    (1)聚合函数
    (2)distinct
    (3)group by
    (4)having
    (5)union 和 union all

    问题7 多表视图与增删改操作

    基于多表生成的视图中,能否进行insert、update、delete操作?
    可以进行update操作,不可以进行insert和delete操作。
    当生成视图的SQL语句中存在以下任意一个条件时,都不可以:
    (1)聚合函数
    (2)distinct
    (3)group by
    (4)having
    (5)union 和 union all

    问题8 视图的作用

    (1)简单
    看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
    (2)安全
    过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
    使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
    (3)数据独立
    视图可帮助用户屏蔽真实表结构变化带来的影响。

    其它问题

    (1)视图可以加索引吗?
    不可以。因为视图是一张虚表。
    (2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?
    视图会随之改变。因为视图中的数据是基表中的映射。

  • 相关阅读:
    java毕业设计病人追踪治疗信息系统mybatis+源码+调试部署+系统+数据库+lw
    LeetCode 1769. 移动所有球到每个盒子所需的最小操作数
    Web学习day04
    基于SpringBoot的CSGO赛事管理系统springboot20
    设计模式 - 状态模式
    SpringBoot测试用例设置随机数据
    Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作
    lodash按需引入
    C++秋招经验贴
    One bite of Stream(5)
  • 原文地址:https://blog.csdn.net/hypertext123/article/details/126209685