zoukankan      html  css  js  c++  java
  • mysql概要(八)视图

    CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
           VIEW 视图名 [(属性清单)]
           AS SELECT 语句
           [WITH [CASCADED|LOCAL] CHECK OPTION];
    
    ALGORITHM表示视图选择的算法(可选参数)
    
          UNDEFINED:MySQL将自动选择所要使用的算法
          MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
          TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
    
    视图名表示要创建的视图的名称
    
    属性清单表示视图中的列名,默认与SELECT查询结果中的列名相同(可选参数)
    
    WITH CHECK OPTION表示更新视图时要保证在该试图的筛选条件范围之内(可选参数)即:用于阻止通过视图更新或插入不满足视图筛选条件的记录。
    当使用WITH CHECK OPTION子句中未显式指定关键字,MySQL默认使用CASCADED规则。
    (补充详细说明)

      CASCADED:更新视图时要满足检查语句所在视图以及其依赖的视图的条件(即对视图的数据修改时,要检查当前及所依赖的视图(视图可以依赖另一个视图)是否存在此语句,该语句所在视图及上一个             视图的筛选条件。满足才能修改。

      LOCAL:更新视图时,只要满足该语句所在视图定义的条件即可,但如果其依赖的视图中有CASCADED,也需同时遵守上一个规则。(即要修改只要满足当前视图的条件。)

     (补充LOCAL/CASCADED

    视图的记录都保存在information_schema数据库中的一个叫views的表中

    1.视图使用时,以表的方式使用

      视图修改

      alter view 视图名 as select ...;

      查看视图的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW(查看视图必须要有SHOW VIEW权限)

    DESCRIBE 视图名
    SHOW TABLE STATUS LIKE 'stu_class'
    SHOW CREATE VIEW stu_class

    1.1创建视图:

        CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]
    -- 创建视图
    CREATE VIEW stu_class(id,NAME,glass) AS SELECT student.`stuno`,student.`stuname`,stuinfo.`class`
    FROM student ,stuinfo WHERE student.`stuno`=stuinfo.`stuno`

    2.视图的好处:

       通过id取模存放四个表中,然后通过视图把表合成一张表;

    3.视图和表的关系:

       视图是表的投影,表修改了会影响视图的数据,但是视图修改不一定影响表:

       a.当视图和表数据是一一对应的,才会相互影响。比如修改数据;能修改才会相互影响(如果是修改视图中的通过表数据计算得到的数据会修改失败)

       b.视图插入数据时,保证视图和表数据对应外,视图还需要包含表中没有默认值的列,因为会相互影响会在表中插入数据,而没有默认值的列,必须在视图中给出其对应的值。

    4.视图的算法(相当于视图的类型)

    4.1 merge和temptable实际查询对象也是不一样的一个针对原表,一个是临时表:

    5.MYSQL中通过CREATE OR REPLACE VIEW 语句和ALTER语句来修改视图

    ALTER OR REPLACE [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
    CREATE OR REPLACE VIEW `stu_class` AS 
    SELECT
      `student`.`stuno`   AS `id`
    FROM (`student` JOIN `stuinfo`)
    WHERE (`student`.`stuno` = `stuinfo`.`stuno`)

    ALTER语句修改视图:

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

    VIEW view_name [(column_list)]

    AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

    ALTER VIEW  stu_class AS SELECT stuno FROM student;

    删除视图使用DROP VIEW语法

    DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

    DROP VIEW能够删除1个或多个视图。必须在每个视图上拥有DROP权限

    可以使用关键字IF EXISTS来防止因不存在的视图而出错

    当视图中包含如下内容的时候,视图的更新操作不被执行

    (1)视图中关联了基表中被定义为非空的列(因为视图没有这个字段,不能给其赋值)(这条不怎么理解)

    (2)定义视图的SELECT语句后的字段列表中使用了数学表达式

    (3)定义视图的SELECT语句后的字段列表中使用聚合函数

    (4)定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句

  • 相关阅读:
    MSSQL '20210806'转换成'2021-08-06'
    cxgrid 列内容居中显示
    CXGRID 导出EXCEL
    study PostgreSQL【3-get数据库中all表以及表的字段信息】
    study PostgreSQL【2-FireDAC连接PostgreSQL】
    高格-销售发票勾稽销售出货的赠品处理【14】
    study PostgreSQL【1-PostgreSQL对象】
    高格-负库存导致系统异常的处理【13】
    study Rust-9【组织管理】
    基础资料属性不符合目标组织要求:物料.允许库存,物料.来料检验
  • 原文地址:https://www.cnblogs.com/straybirds/p/5133997.html
Copyright © 2011-2022 走看看