mysql--视图

视图:

        通俗的讲,视图就是一条SELECT语句执行后返回的结果集。

为什么要用到视图:

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

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

        2)可以进行权限的控制(把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列)

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

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

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

                视图的增删改也会影响表;但视图并不总是能增删改的;

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

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

视图详解:

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


创建视图:

        create [or replace] [algorithm = {undefind | merge | temptable}]  view view_name[(column_list)]  as select_statement [with [cascaded | local ] check option]

        创建(或者替换)(视图算法:合并| 临时表)视图名称  (select_statement:select语句,可从基表或者其他视图进行选择,给出了视图的定义)

        algorithm :视图的算法

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

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

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

        with [ cascaded | local ] check option :检查依赖视图中的规则以保持一致性,默认cascaded 

            如果视图使用with local check option ,mysql会检查with local check optionwith cascaded check option 选项的视图规则。与使用with cascaded check option的视图不同,mysql检查所有依赖视图的规则。不过我们要注意,在mysql5.7.6之前,如果我们使用带有with local check option的视图,mysql只会检查当前视图的规则,并且不会检查底层视图的规则。

查看视图:

        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 (使用临时表总会使视图称为不可更新的)


你可能感兴趣的:(mysql--视图)