当前位置:Gxlcms > mysql > MySQL管理与优化(8)_MySQL

MySQL管理与优化(8)_MySQL

时间:2021-07-01 10:21:17 帮助过:33人阅读

视图

  • 视图是一种虚拟存在的表,对于使用视图的用户来说基本是透明的。
  • 视图相对于普通表的优势:

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

不吝指正。

人气教程排行