视图概述

    视图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 也可以查看视图相关信息.