敖胤

绳锯木断,水滴石穿;聚沙成塔,集腋成裘。

导航

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命令。

posted on 2021-07-15 20:30  敖胤  阅读(646)  评论(0编辑  收藏  举报