13.2.7 视图

13.2.7 视图

视图看上去非常像一个数据表,但它不是数据表,因为它并不能存储数据。视图只是一个或多个数据表中数据的逻辑显示

使用视图的好处

使用视图有如下几个好处。

  • 可以限制对数据的访问。
  • 可以使复杂的查询变得简单。
  • 提供了数据的独立性。
  • 提供了对相同数据的不同显示。

创建视图

因为视图只是数据表中数据的逻辑显示——也就是一个查询结果,所以创建视图就是建立视图名和查询语句的关联。创建视图的语法如下:

1
2
3
create of replace view 视图名
as
subquery

从上面的语法可以看出,创建、修改视图都可使用上面语法。上面语法的含义是,如果该视图不存在,则创建视图;如果指定视图名的视图已经存在,则使用新视图替换原有视图。后面的subquery就是一个查询语句,这个查询可以非常复杂。

视图的本质

通过建立视图的语法规则不难看出,所谓视图的本质,其实就是一条被命名的SQL查询语句

通常只查询视图

一旦建立了视图以后,使用该视图与使用数据表就没有什么区别了,但通常只是查询视图数据,不会修改视图里的数据,因为视图本身没有存储数据。

实例

如下SQL语句就创建了一个简单的视图:

1
2
3
4
create or replace view view_test
as
select teacher_name,teacher_pass
from teacher_table

强制不允许修改视图的数据

通常不推荐直接改变视图的数据,因为视图并不存储数据,它只是相当于一条命名的查询语句而已。为了强制不允许改变视图的数据,MySQL允许在创建视图时使用with check option子句,使用该子句创建的视图不允许修改,如下所示:

1
2
3
4
create or replace view view_test
as
select teacher_name form teacher_table
with check option

数据库区别

大部分数据库都采用with check option来强制不允许修改视图的数据,但Oracle采用with read only来强制不允许修改视图的数据。

删除视图

删除视图使用如下语句:

1
drop view 视图名

如下SQL语句删除了前面刚刚创建的视图:

1
drop view  view_test;