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;
    
原文地址:https://www.cnblogs.com/Jamdu0406/p/12752790.html