一、视图概述
- 在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;
六、物化视图
待续