凌优教育
您的当前位置:首页MySQL管理与优化(8)_MySQL

MySQL管理与优化(8)_MySQL

来源:凌优教育


视图

  • 视图是一种虚拟存在的表,对于使用视图的用户来说基本是透明的。
  • 视图相对于普通表的优势:
  • 1. 简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是 过滤好的符合条件的结果集。

    2. 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能到某个行某个 列,但是通过视图就可简单地实现。

    3. 数据:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响; 源表修改列名,则可以通过修改视图来解决,不会造成对访问的影响。

    视图操作

    创建或修改视图:

  • 创建视图的语法:
  • CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
  • 修改视图的语法:
  • ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
  • 范例:
  • -- 创建或更新视图mysql> CREATE OR REPLACE VIEW city_list_view AS -> SELECT id, city FROM city;Query OK, 0 rows affected (0.07 sec)
  • MySQL视图定义有一些:
  • 1. FROM关键字后面不能包含子查询。

    2. 包含以下关键字的SQL语句:聚合函数(SUM, MIN,MAX,COUNT等),(DISTINCT, GROUP BY,HAVING, UNION, UNION ALL)。

    3. 常量视图。

    4. SELECT中包含子查询。

    5. JOIN。

    6. FROM一个不能更新的视图。

    7. WHERE子句的子查询引用了FROM子句中的表。

  • 对于WITH [CASCADED|LOCAL] CHECK OPTION:
  • 1. LOCAL是只要满足本视图的条件就可以更新;

    2. CASCADED则是必须满足所有针对该视图的所有视图的条件才可以更新。如,

    删除视图

  • 删除视图语法:
  • DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]
    mysql> drop view city_list_view;Query OK, 0 rows affected (0.00 sec)

    查看视图

    -- MySQL5.1后, show tables也会列出视图mysql> show tables;+---------------------+| Tables_in_mysqltest |+---------------------+| blob_test || city || city_list_view1 || city_list_view2 || city_list_view3 |+---------------------+5 rows in set (0.00 sec)-- 模糊查询视图mysql> show table status like 'city_list%' /G
    具体视图相关的细节可参考:

    http://dev.mysql.com/doc/refman/5.7/en/views.html

    不吝指正。

    显示全文