11 MySQL视图

视图概述
    视图View是一种虚拟存在的表.行和列数据来自自定义视图的查询中使用的表,在使用视图时动态生成.
    视图的优势:
        简单:用户不需要关心后面对应的表的结构,关联条件和筛选条件.对用户来说事已经过滤筛选好的复合条件的结果集. -- 那应该就是相当于Java中的接口了.
        安全:使用视图的用户只能访问他们被允许查询的结果集;而表的权限管理并不能限制到某隔行某个列.
        数据独立:一旦视图的结构确定了,屏蔽表结构对用户的影响:源表增加数据列对视图没有影响;源表修改列名,可以通过修改视图来解决.
 
 
视图操作
 
    1).创建/修改视图
        创建/修改/删除视图 都需要用相关权限.并且对于涉及的列具有SELECT权限.
 
        a.创建视图
          CREATE [OR REPLACE][ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
            VIEW view_name [(column_list)]
            AS select_statement
            [WITH [CASCADED|LOCAL] CHECK OPTION]
 
        b.修改视图
          ALTER [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
            VIEW view_name [(column_list)]
            AS select_statement
            [WITH [CASCADED | LOCAL] CHECK OPTION]
 
    注意:MySQL 视图的定义有一些限制.
            与其他数据库不同,在FROM关键字后面不能包含子查询.
            可以通过把子查询中的内容定义成一个视图,然后对该视图创建视图就可以实现类似功能.
 
        视图的可更新性与视图中查询的定义有关系.
        以下类型的视图是不可更新的.
 
            a.包含以下关键字的SQL语句:
                    聚合函数(SUM,MIN,MAX,COUNT等)
                    DISTINCT
                    GROUP BY
                    HAVING
                    UNION
                    UNION ALL
 
            b.常量视图
            c.SELECT 中 包含子查询.
            d.JOIN
            e.FROM 一个不能更新的视图
            f.WHERE子句的子查询引用了FROM子句中的表
 
        Demo:
            --包含聚合函数
            CREATE OR REPLACE VIEW payment_sum 
            AS
                SELECT staff_id , SUM(amount)
                FROM payment
                GROUP BY staff_id ;
 
            --常量视图
            CREATE OR REPLACE VIEW pi AS
                SELECT 3.141592653 as pi ;
 
            -- SELECT 中包含子查询
            CREATE VIEW city_view 
            AS
                SELECT (SELECT city FROM city WHERE city_id = 1 ) ;
 
 
    WITH [CASCADED|LOCAL] CHECK OPTION 决定了 是否允许更新数据 使得记录不再满足视图条件. 
    其中,LOCAL 是只要满足本视图条件就可以更新;CASCADED则是必须满足所有针对盖世兔的所有视图条件才可以更新. 如果没有明确指定,默认是CASCADED.
 
    2).删除视图
        可以一次性删除一个或者多个视图,前提是有该视图的DROP权限.
        DROP VIEW [IF EXISTS] view_name [,view_name1,..,view_nameN] [RESTRICE | CASCADE]
 
    3).查看视图
        从MySQL5.1开始,不存在SHOW VIEWS 命令,统一使用SHOW TABLES命令.SHOW TABLE STATUS 命令同理,也会显示视图的信息.
        SHOW TABLE STATUS [FROM db_name] [LIKE 'patter'] ;
 
       查看视图定义
        SHOW CREATE VIEW view_name ;
 
       通过查看系统表information_schema.views 也可以查看视图相关信息.
posted @ 2019-07-04 14:02  豆豆飞  阅读(143)  评论(0编辑  收藏  举报