MySQL(InnoDB剖析):20---table之(视图、物化视图)

一、视图概述

  • 在MySQL数据库中,视图(view)是一个命名的虚表,它由一个SQL查询来定义,可以当做表使用。与持久表不同的是,视图中的数据没有实际的物理存储

二、视图的作用

  • 视图在数据库中发挥着重要的作用。视图的主要用途之一是被用做一个抽象装置,特别是对于一些应用程序,程序本身不需要关心基表的结构,只需要按照视图定义来取数据或更新数据,因此,视图同时在一定程度上起到一个安全层的作用
  • MySQL数据库从5.0版本开始支持视图,创建视图的语法如下:

三、视图的基本使用

  • 虽然视图是基于基表的一个虚拟表,但是用户可以对某些视图进行更新操作,其本质就是通过视图的定义来更新基本表
  • 一般称可以进行更新操作的视图为可更新视图

四、with check option

  • 视图定义中的with check option就是针对于可更新的视图的,即更新的值是否需要检查。下面先看一个例子

演示案例

  • 创建一个表,然后再创建一个视图,该视图用来查询表中id<10的数据
create table t(
    id int
);
create view v_t as select * from t where id<10;

  • 然后向视图中插入20,可以插入成功
insert into v_t select 20;

select * from v_t;

select * from t;

 

  •  上面的例子中,向视图中插入了id为20(id>10的值),插入操作没有出错。但是用户查询视图没有查找到数据
  • 接着更改视图的定义,加上with check option选项。再次插入时,视图会检测到插入的值不符合视图的要求,插入失败
alter view v_t as select * from t where id<10 with check option;
insert into v_t select 20;

 

五、视图的查看

  • 视图是虚表,同样会被作为表显示出来,例如:
show tables;

 

  • 若用户指向查看当前数据库下的基表,可以通过information_schema数据库中的table表来查询,搜索表类型为“base table”。SQL语句如下:
select * from information_schema.tables
where table_type='base table'
and table_schema=database()\G;

 

  • 若想要查看视图的一些元数据,可以访问information_schema数据库下的views表,该表给出了视图的详细信息,包括视图定义者、定义内容、是否可更新视图、字符集等。例如查新views表可得:
select * from information_schema.views
where table_schema=database()\G;

六、物化视图

待续

发布了1399 篇原创文章 · 获赞 958 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/104147709