MySQL视图
MySQL从5.0.1版本开始提供视图功能。
视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成。
视图相对于普通表的优势主要表现在:
-
简单
使用视图的用户完全不需要关心后面对应的表的结构、关联条件、和筛选条件。
-
安全
使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,而通过视图可以轻松实现。
-
数据独立
一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,可通过修改视图来解决,不会对访问者造成影响。
视图的操作包括创建、修改、删除及查看视图定义。
创建视图
创建视图需要有CREATE VIEW的权限,并且对于查询涉及到的列有SELECT权限。如果使用CREATE OR REPLACE,那么哈需要有该视图的DROP权限。
创建视图的语法为:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)]
AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
eg:
mysql> SHOW tables;
mysql> create view v_demo as select * from demo;
mysql> show tables;
mysql> desc v_demo;
MySQL视图的定义有一些限制,在from子句中不能有子查询,这和其他数据库是不同的。如果视图是从其他数据库迁移过来的,那么,可以将自查徐你的内容先定义一个视图,然后对该视图在创建视图就可以实现类似功能。
视图的可更新性和视图中查询的定义有关系,如下类型的的视图是不可更新的。
- 包含以下关键字的SQL语句:聚合函数(
SUM
MIN
MAX
COUNT
等)、DISTINCT、GROUP BY、HAVING、UNION或者NION ALL。 - 常量视图(create view v_pi as select 3.1415926 as pi from dual;)。
- SELECT中包含子查询。
- JOIN。
- FROM一个不能更新的视图。
- WHERE子句的子查询引用了FROM子句中的表。
修改视图
修改视图的语法为:
ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)]
AS select_statement [WITH [CASCADED|LOCAL] CHEDK OPTION];
删除视图
用户可以一次删除一个或者多个视图,前提是必须有该视图的DROP权限。
删除视图的语法如下:
DROP VIEW [IF EXISTS] view_name [,view_name...] [RESTRICT|CASCADE];
查看视图
从MySQL5.1版本开始,使用SHOW TABLES
命令不仅可以显示表的名字,同时也会显示视图的名字,不存在单独显示视图的SHOW VIEW
命令。