09-视图

作者: 喝酸奶要舔盖__ | 来源:发表于2019-01-06 18:23 被阅读0次

    视图基本概念

    • 什么是视图?
      • 视图仅仅是表的结构, 没有表的数据
      • 视图的结构和数据是建立在表的基础上的
      • 视图中保存了一张表或者多张表的部分或者所有数据
    • 视图的作用
    + 例如 表中有id,name,age,gender,score, 我们需要查询id,name,gender
        + select id,name,gender from stu;
        + 如果在表的基础上创建了一个包含id,name,gender的视图
        + select * from stu_view;
    - 视图可以用来隐藏表的结构
        + 表中有id,name,age,gender,score, 视图中有id,name,gender
        + 那么外界在使用视图的时候就不知道表中还有age和score
    

    创建视图语法

    • create view 视图名称 as select 语句;
    示例一:
    select name,city from stu;
    create view stu_view as select name,city from stu;
    select * from stu_view;
    
    注意点:
    视图仅仅是表的结构, 没有表的数据
    视图是建立在表的基础上的, 如果修改视图中的数据本质上是修改了表中的数据
    
    #由于视图不保存数据, 本质上数据是插入到了表中
    insert into stu_view values('yyyy', '武汉');
    #由于视图不保存数据, 本质上修改的是表中的数据
    update stu_view set city='杭州' where name='ww';
    #由于视图不保存数据, 本质上删除的是表中的数据
    delete from stu_view where name='ww';
    
    示例二:
    在多表查询的时候, 如果需要显示重复字段, 必须在字段名称前面加上表名
    select * from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
    select stuinfo.stuid, name, score from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
    
    create view studes_view as select stuinfo.stuid, name, score from stuinfo inner join stugrade on stuinfo.stuid=stugrade.stuid;
    

    更改视图

    • alter view 视图名称 as select 语句;
    create view stu_view as select name,city from stu;
    # 修改视图返回的结果
    alter view stu_view as select name,age,city from stu;
    

    删除视图

    drop view [if exists] 视图名;
    drop view if exists stu_view;
    

    视图算法(了解)

    select * from (select * from stu order by score desc) as t group by city;
    #将子查询封装到视图中去
    create view order_view as select * from stu order by score desc;
    #用视图替代子查询
    select * from order_view group by city; #结果出现了误差
    
    视图算法
    - merge: 合并算法, 将视图的语句和外层的语句合并之后再执行
    - temptable: 临时表算法, 将视图生成一个临时表, 再执行外层的语句
    - undefined: 未定义, 由MySQL自己决定使用如上的哪一种算法, 默认就是undefined
               + 由于合并算法的效率比临时表算法效率高, 所以MySQL一般会选择合并算法
    - 如上案例中导致数据混乱的原因就是因为默认使用了合并算法
    
    #将子查询封装到视图中去
    # algorithm=temptable指定视图的算法
    create algorithm=temptable view order_view as select * from stu order by score desc;
    #用视图替代子查询
    select * from order_view group by city;
    

    相关文章

      网友评论

          本文标题:09-视图

          本文链接:https://www.haomeiwen.com/subject/ujvsrqtx.html