视图

回到首页☞

1、什么是视图

视图是一个虚拟表,是sql的查询结果,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。视图的数据变化会影响到基表,基表的数据变化也会影响到视图[insert update delete ] ; 创建视图需要create view 权限,并且对于查询涉及的列有select权限;使用create or replace 或者 alter修改视图,那么还需要改视图的drop权限。

2、视图的优点

  • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

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

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

总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

3、视图操作

3.1、创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
   [WITH [CASCADED | LOCAL] CHECK OPTION]
  • OR REPLACE:表示替换已有视图

  • ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表

  • select_statement:表示select语句

  • [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内

    • cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件

    • local表示更新视图的时候,要满足该视图定义的一个条件即可

TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性

基本格式:

 create view <视图名称>[(column_list)]

   as select语句

   with check option;

示例:

CREATE 
	OR REPLACE VIEW t_order_detail_v AS SELECT
	o.id AS orderId,
	o.user_id AS userId,
	o.order_status AS orderStatus,
	o.create_date AS createDate,
	od.product_name AS productName 
FROM
	t_order o,
	t_order_detail od 
WHERE
	o.id = od.order_id;

4、查看视图

  • 使用show create view语句查看视图信息
show create view t_order_detail_v \G;
  • 视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询
mysql> select * from view_name;
  • 有关视图的信息记录在information_schema数据库中的views表中
SELECT
	* 
FROM
	information_schema.views 
WHERE
	TABLE_NAME = 't_order_detail_v';

5、视图的更改

  • CREATE OR REPLACE VIEW语句修改视图

基本格式:

create or replace view view_name as select语句;

在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

  • ALTER语句修改视图

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]

注意:修改视图是指修改数据库中已存在的表的定义,当基表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致

  • drop删除视图
    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:
DROP VIEW [IF EXISTS]   
view_name [, view_name] ...
mysql> drop view v_student;

如果视图不存在,则抛出异常;使用IF EXISTS选项使得删除不存在的视图时不抛出异常。

回到首页☞


版权声明:本文为weixin_38280568原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。