• mysql---视图


    视图是一张虚拟的表,并没有实际存储数据,存储的是一种“函数关系”。

    语法:

    create view 视图名 as select语句。

    为什么说视图存储的是一种函数关系?

    当引用视图时,它会依据这样的关系到创建视图的各个表中去寻找相关字段。并依照这样的关系进行运算得到结果。所以视图不须要存储数据,仅仅须要存储这样的“函数关系”。

    如表1是记录长方形长的表

    长(cm)
    10

    如表2是记录长方形宽的表

    宽(cm)
    20

    如今创建一个视图用来求长方形面积

    面积
    长*宽
    当须要引用视图的时候,视图会依照函数关系“面积=长*宽”到表1和表2中取数据运算得到所需结果。实际上视图并没有存储每一个长方形的面积。

    以上表设计不严谨仅仅是为了说明问题。


    表改变会改变视图吗?

    由于是函数关系f(x,y)。当x或者y有一个变化时。f(x,y)的值一定会变化。x和y相当于创建视图的表,f(x,y)相当于视图。

    创建一张学生成绩表


    各个字段分别代表“学生ID”。“数学成绩”,“语文成绩”。“英语成绩”。


    如今创建一个求各个学生平均成绩的视图


    对表做一下修改,看看视图会不会跟着一起变化


    再看看视图的内容


    视图的确变化了。所以表的变化一定会影响视图。


    视图改变会改变表吗?

    这不一定。假设视图和表是以一个相应的,即f(x,y)能够反得到x,y(类似反函数关系)。

    这样的情况下。视图改变会影响原有表。

    对于求平均成绩的视图,无法由平均成绩得到各科的成绩,所以他们不是一一相应关系,这样的情况Mysql不同意改变视图



    视图有三种实现方式

    merge:引用视图时。将引用时的条件与创建视图时的条件合并。构成新的查询语句去各个表中查询。

    以之前的平均分视图为例。红色划线为创建视图的查询语句


    如今要求平均分前三高的学生,能够直接引用视图来查询


    假设algorithm设置为merge

    实际的操作是将这两次的查询条件合并相当于


    temptable:引用视图时。先依照创建视图的条件查询各个表,将结果生成暂时表,再对暂时表进行查询。

    undefined:数据库默认undefined由数据库依据情况决定用merge还是temptable。


    视图的作用

    (1)方便操作:假设要经经常使用到某个暂时表时,比方上面的平均分视图。假设未定义视图,每次都须要求平均分暂时表。再去对暂时表进行查询。有视图就非常方便。直接查询视图就能够了。

    (2)安全考虑:假设两个公司合作,须要开放两方的一些用户信息,可是又不想发布一些涉及隐私或机密的信息(如用户password)。能够生成不包括password字段的视图给对方。对方直接使用视图就可以满足要求。

  • 相关阅读:
    Windows10切换其他用户身份运行程序
    管理Windows功能
    如何暂时锁定您的键盘
    判断远程计算机基于x64或x86处理器
    复制文件而不在命令行中覆盖它们
    解决IDEA Gradle工程控制台输出乱码
    jquery 选择器、属性和CSS、文档处理、筛选、事件、动画效果
    IDEA炫酷主题推荐!(转)
    Windows 查看端口占用进程并关闭(转)
    JVM(二)--运行时数据区
  • 原文地址:https://www.cnblogs.com/llguanli/p/8446287.html
Copyright © 2020-2023  润新知