zoukankan      html  css  js  c++  java
  • MySQL视图

    create table teacher(
    id int primary key auto_increment,
    name varchar(10),
    salary decimal(10,2)
    );
    insert into teacher values(null,'李国冬',100.11);
    insert into teacher values(null,'周杰伦',132.41);
    insert into teacher values(null,'邓丽君',156.16);

    创建视图

    create view view_name as select statement;

    create view view_teacher as 
    select id,name from teacher;

    视图就是存在于数据库中的虚拟表。

    insert into view_teacher values(null,'范冰冰');

    select * from (select id,name from teacher) as temp;

    视图本身没有数据,仅仅是通过运行对应的select语句完毕获得对应的数据。

    insert into teacher values(null,'宁泽涛','324.32');

    视图管理

    删除视图

    drop view [if exists] view_name;

    drop view view_teacher;

    改动视图

    alter view view_name as select_statement;

    alter view view_teacher as 
    select id,name,salary from teacher;
    

    alter view view_teacher(v1,v2,v3)as 
    select id,name,salary from teacher;

    缩减业务逻辑

    通过视图能够将复杂的业务逻辑简单的完毕,先使用视图完毕一定的逻辑,在视图的基础上完毕另外的逻辑。


    通常。视图完毕的逻辑都是相对来说比較基础的逻辑。

    select * from one as v1 left join two as v2 
    on v1.one_id=v2.two_id; 
    
    create view one_two as 
    select one_id,two_id from one as v1 left join two as v2 
    on v1.one_id=v2.two_id; 
    
    select * from one_two;

    视图的运行流程

    指的是一个视图是在什么时候运行,根据哪些方法运行。

    视图存在两种运行算法:
    1、merge
    2、temptable

    merge:合并的运行方式。每当运行的时候,先将视图的sql语句与外部查询视图的sql语句混合在一起,终于运行。

    temptable:暂时表模式。每当查询的时候,将视图所使用的select语句生成一个结果的暂时表,再在当前的暂时表内进行查询。

    当用户创建试图时,mysql默认使用一种undefined的处理算法。就是会自己主动在合并方式和暂时表方式进行选择。

    获得每一个班级的总天数?

    假设获得班级内,代课天数最多的信息?

    select c_id ,max(day) from teacher_grade group by c_id 
    order by day asc;
    
    create view view_days as select c_id ,max(day) from teacher_grade 
    group by c_id order by day asc;

    下面两种方式,使用与不使用视图的对照?

    drop view view_days;
    create view view_days as select c_id ,max(day) as max_day from teacher_grade 
    group by c_id order by day asc;
    
    select * from view_days group by max_day;
    select * from  (select c_id ,max(day) as max_day from teacher_grade 
    group by c_id order by day asc)as temp group by max_day;

    注意:
    尽量使用视图完毕读操作
    假设使用视图。则须要注意对视图的改动,也是对真实表的改动。会及时生效。
    删除视图是不会销毁实体表内的数据的
    假设大家做的是外部接口。一个数据库多个应用,应该考虑针对每一个应用採用不同的视图接口。

  • 相关阅读:
    排列与组合
    C++构造函数虚函数例题
    排序
    Android相机是如何获取到图像的
    《Android进阶》之第七篇 NDK的使用
    递归相关题目
    华为模拟性格测试
    平衡二叉树
    Fragment回调接口应用间分享数据
    IOS中限制TextField中输入的类型以及长度
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7010374.html
Copyright © 2011-2022 走看看