视图概述
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
视图与表不同,它在物理上不是真实存在的,而是一个虚表。在数据库里仅存放视图的定义,而不存放视图对应的数据。视图中的这些数据存放在其对应的表中,如果表中的数据发生了变化,从视图中查询出的数据也会随之发生改变(基本表中有插入,删除等操作,视图中的数据也会改变)。从这个意义来看,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。每一次查看视图或引用视图的的时候,都会运行一次视图上的查询。
视图创建语句
CREATE VIEW Student(column1,column2...)
AS SELECT column1,column2... FROM t1,t2
WHERE t1.column=t2.column;
CREATE VIEW VMGRADE
AS SELECT column1,MAX(column2)
FROM t1
GROUP BY column1
数据库视图的优点
1. 数据库视图可以简化复杂的查询
数据库视图由许多基础表相关联的 SQL 语句定义,可以使用数据库视图向最终用户和外部应用程序隐藏底层表的复杂性。通过数据库视图,只需要使用简单的 SQL 语句,不需要编写具有许多连接的复杂语句。
2. 数据库视图有助于限制对特定用户的数据访问
如果不希望所有用户都可以查询敏感数据,就可以使用数据库视图仅向特定用户组公开非敏感数据。
3. 数据库视图提供了额外的安全层。
安全性是任何关系数据库管理系统的重要组成部分,数据库视图为数据库管理系统提供了额外的安全性。数据库视图允许创建只读视图以向特定用户公开只读数据,用户只能在只读视图中检索数据,但不能对其进行更新。
4. 数据库视图可以定义计算列
数据库表中不应该有计算列,但是数据库视图支持有计算列。假设在订单表中有订购产品的数量和每个产品的价格列,但是订单表定义一列来存储每个订单的总销售额。如果有,这样的数据库模式也不是一个好的设计。在这种情况下,可以创建一个名为总销售额的列, 它是计算结果是产品的价格乘以订购产品的数量。当从数据库视图查询数据时,计算列的数据会动态进行计算。
5. 数据库视图支持应用兼容性
假设有一个核心数据库,许多应用程序都在使用它,为了适应新的业务需求,有可能会重新设计数据库,删除了一些表并创建了几个新表,修改表的列名,此时并不希望这些更改影响之前的应用程序。在这种情况下,可以使用与已删除的旧表相同的表结构创建数据库视图。应用程序可以访问视图来完成此前功能,这样就无需对应用程序做任何的修改。
数据库视图的缺点
在传统数据库中使用视图有以下几个缺点:
1.性能可能会较差
从传统数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
2.视图对表结构的依赖
由于视图时根据数据库的基础表创建的,每当更改与视图关联的那些表的结构时,也必须更改视图。