美文网首页程序猿的进阶屋
mysql进阶05(视图)

mysql进阶05(视图)

作者: 机智的老刘明同志 | 来源:发表于2018-08-19 22:20 被阅读11次

    为什么要用到视图:

        如果某个子查询结果出现的非常频繁,也就是说要经常拿这个查询结果来做子查询的时候

        1)利用视图可以简化查询语句

        2)可以进行权限的控制

            把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列

        3)大数据表分表的时候,比如说某表的数据有100万条,那么可以将这个表根据id取余分为多个视图

    分为多个视图

        4)视图是表的查询结果,自然表的数据变了,会影响视图的结果

        5)能否对视图进行增删改查的操作?

            视图的增删改也会影响表;

            但视图并不总是能增删改的;

            视图的数据与表的数据一一对应时可以修改

        对于视图insert还应该注意:视图必须包含表中没有默认值的列

    视图详解

        1 视图放在information_schema数据库下的views表里

        2 创建视图

        create [or replace] [algorithm = {undefind | merge | temptable}]  view view_name[(column_list)]

        as select_statement [with [cascaded | local ] check option]

        创建(或者替换)(算法:合并的执行方法| 临时表的执行方法)一个视图 

        select_statement是一种select语句,他给出了视图的定义,该语句可从基表或者其他视图进行选择

        3 视图的算法

        Merge:合并的执行方式,每当执行的时候,先将我们视图的sql语句与外部查询视图的sql语句,混合在一起,最终执行

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

        Undefined: mysql将选择所要使用的算法,如果可能,更倾向于merge,因为如果使用了临时表,视图得不到更新

    查看视图

        show table status from liuming like 'v_users4'\G    

    删除视图

        删除视图之前,要保证有删除的权限

        查看一下root用户的删除权限 select drop_priv from mysql.user where user="root" \G

        drop view if exists v_users4 ;  删除视图

    有以下情况视图不会更新

        聚合函数(SUM(),MIN(),MAX(),COUNT()等)

        DISTINCT (去重)

        GROUP BY

        HAVING

        UNION   UNION ALL

        位于选择列表中的子查询

        join

        FROM字句中的不可更新视图

        where字句中的子查询,引用from字句中的表

        algorithm = TEMPTABLE (使用临时表总会使视图称为不可更新的)

    with check option

        必须满足视图的条件,才会更新视图的数据

    相关文章

      网友评论

        本文标题:mysql进阶05(视图)

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