• mysql视图(note5)


    第六周(Mysql视图)

    1. 视图的优点

    • 为用户集中数据,简化用户数据的查询处理
    • 屏蔽数据库的复杂性
    • 简化用户权限的管理
    • 便于数据共享
    • 可以重新组织数据一边输出到其他应用程序

    2. 创建视图语法

    CREATE [OR REPLACE] VIEW 视图名 [(列名···)]
    AS SELECT 语句
    
    # OR REPLACE :能够替换已有的同名视图
    
    
    #    	例子一
    # 假设当前数据库是test,创建xscj数据可上的cs_kc视图,包含
    #计算机专业各学生的学号、其选修的课程号及成绩。要保证对该
    #视图的修改都符合专业名为计算机这个条件
    CREATE OR REPLACE VIEW xscj.cs_kc
    AS
    SELECT xs.`学号`,课程号,成绩
    FROM xscj.`xs`,xscj.xs_kc
    WHERE xs.`学号`=xs_kc.`学号` AND xs.`专业名`='计算机'
    WITH CHECK OPTION;
    
    #查询视图
    DESCRIBE cs_kc;
    
    #		例子二
    # 创建xscj数据库上的计算机专业学生的平均成绩视图cs_kc_avg
    #包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)
    USE xscj;
    CREATE VIEW xs_kc_avg(num,score_avg)
    AS
    SELECT 学号,AVG(成绩)
    FROM xs_kc
    GROUP BY 学号;
    
    #查询视图
    DESCRIBE xs_kc_avg;
    
    #		例子三
    # 查找平均成绩80分以上的学生的学号和平均成绩
    CREATE OR REPLACE VIEW xs_kc_avg(num,score_avg)
    AS
    SELECT 学号,AVG(成绩)
    FROM xs_kc
    GROUP BY 学号;
    #再对xs_kc_avg视图进行查询
    SELECT * 
    FROM xs_kc_avg
    WHERE score_avg>=80;
    

    3. 视图更新

    1. 可更新视图

      • 对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系
      • 如果视图中包含下述中的任何一种,那么它就是不可更新的
        1. 聚合函数
        2. Distinct关键字
        3. Group by子句
        4. Order by子句
        5. Having子句
        6. Union子句
        7. 位于选择列表中的子查询
        8. From子句中包含多个表
        9. Select语句中引用了不可更新视图
        10. Where子句中的子查询,引用from子句中的表
        11. Algorithm选项指定为temptable(使用临时表总会使视图成为不可更新的表)
    2. 插入数据

      #		例子四
      
      #创建视图cs_xs视图中包含计算机专业的学生信息,并向cs_xs试图插入一条记录
      CREATE OR REPLACE VIEW cs_xs
      AS
      SELECT * 
      FROM xs
      WHERE 专业名='计算机'
      WITH  CHECK OPTION;
      
      #插入数据
      INSERT INTO cs_xs VALUES('081225','李牧','计算机',1,'1994-10-14',50,NULL,NULL);
      
      #查看视图cs_XS
      SELECT* FROM cs_xs;
      
    3. 更新数据

      # 
      # 将cs_kc视图中学号为'081101'的学生的101课程成绩修改为90分
      
      UPDATE cs_kc
      SET 成绩=90
      WHERE 学号='081101' AND 课程号='101';
      
    4. 修改视图

      # 将cs_xs视图修改为只包含计算机专业学生的学号、姓名和总学分三列
      ALTER VIEW cs_xs
      AS
      SELECT 学号,姓名,总学分
      FROM xs
      WHERE 专业名='计算机';
      
      SELECT * FROM cs_xs;
      
      
    5. 删除视图

      
      #删除视图
      DROP VIEW IF EXISTS cs_xs;
      
  • 相关阅读:
    template.js简单入门
    Tortoisegit和GitHub使用入门
    自定义Http请求头并且获取
    Dapper基础入门
    StackExchange.Redis在net中使用
    领域驱动设计(DDD)
    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) AspectJ
    重构流程
    性能优化方法论举例(***)
    线上紧急问题,如宕机、卡顿、bug等,如何快速反应和解决,具体解决方案
  • 原文地址:https://www.cnblogs.com/Jamdu0406/p/12752790.html
Copyright © 2020-2023  润新知