视图学习笔记
1、视图的概念
视图是关系数据库系统提供给用户以多角度观察数据库中数据的重要机制。它不仅满足了各用户的个性需要,还提供了一种屏蔽未授权数据或无关数据的保护机制,将用户的处理或查询操作限定在他有权处理或查询的数据上。
视图是从一个或多个基本表和视图导出的虚表,它只有定义,没有对应的物理数据。视图中的内容数据只能存在于相应的基本表中,当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。所以视图就好比是一个窗口,透过它可以看到自己感兴趣的数据及其变化。使用视图有如下几个优点:
① 利于数据保密。对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。
② 简化查询操作。为复杂的查询建立一个视图,用户不必键入复杂的查询语句,只需针对此视图做简单的查询即可。
③ 保证数据的逻辑独立性。对于视图的操作,比如查询,只依赖于视图的定义。当构成视图的基本表要修改时,只需修改视图定义中的子查询部分。而基于视图的查询不用改变。这就是第一章介绍过的外模式与模式之间的独立性,即数据的逻辑独立性。
视图与基本表既有相同之处,又有不同之处。视图一经定义,就可以和基本表一样被查询、删除,也可以在一个视图的基础上再定义新的视图,但一般不允许修改视图定义,并且对视图中数据的更新操作也有一定的限制。
2、定义视图
CREATE VIEW <视图名> [( <列名>[{,<列名>}] )]
AS <子查询>
[ WITH CHECK OPINION ] ;
其中<列名>即是所建视图中含有的列的名字,在这里全部省略<列名>则表示该视图由子查询中的目标列名组成;<子查询>可以是任意复杂的SELECT查询语句,但通常不允许含有ORDER BY 子句和DISTINCT短语,具体的SELECT查询语句语法将在本书5.3.1节详细介绍;WITH CHECK OPINION表示对视图进行更新操作(如UPDATE,INSERT等)时,保证修改、插入的记录满足子查询中的条件表达式,这样就可以防止用户通过视图对数据进行增、删、改等更新操作时,有意或无意地破坏不属于视图范围内的基本表数据。
例6 建立一个租赁价格不小于100.00的汽车的基本信息的视图High_price1。
CREATE VIEW High_price1
AS
SELECT Auto_order,Auto_ID,Auto_name,Lease_price,Purchase_date
FROM Automobile
WHERE Lease_price>=100.00;
例7 建立一个租赁价格不小于100.00的汽车基本信息的视图High_price2,并且要求进行修改和插入操作时仍保证视图只有租赁价格不小于100.00记录。
CREATE VIEW High_price2
AS
SELECT Auto_order,Auto_ID,Auto_name,Lease_price,Purchase_date
FROM Automobile
WHERE Lease_price>=100.00
WITH CHECK OPINION;
视图还可以是从多个基本表和视图导出。
例8 建立一个已出租的汽车的全部信息的视图Leased_Auto1。
CREATE VIEW Leased_Auto1
AS
SELECT Automobile.Auto_order,Auto_ID,Auto_name,Lease_price,Purchase_date, Client_code, Lease_date
FROM Automobile,Lease
WHERE Automobile.Auto_order=Lease.Auto_order;
例9 在表Automobile和视图High_price1的基础上建立一个已出租且租赁价格不小于100.00的汽车基本信息的视图Leased_Auto2。
CREATE VIEW Leased_Auto2
AS
SELECT Automobile.Auto_order,Auto_ID,Auto_name,Lease_price,Purchase_date, Client_code, Lease_date
FROM Automobile, Lease, High_price1
WHERE Automobile.Auto_order= Lease.Auto_order AND Automobile.Auto_order=High_price1.Auto_order;
3、删除视图
当导出视图的基本表被删除后,该视图将失效,但一般不会被自动删除,通常需要用DROP VIEW语句显式删除视图,该语句的格式为:
DROP VIEW <视图名> ;
例10 删除视图Leased_Auto2。
DROP VIEW Leased_Auto2;
视图一旦删除,由该视图导出的其它视图也将失效,因此与删除基本表一样,删除视图时也要小心。
4、通过视图更新数据
通过视图更新数据的必须条件
1、SELECT语句中没有使用聚合函数或Group by、Union、Distinct或Top子句
2、INSERT、UPDATE、DELETE语句必须满足一定的条件才能引用可更新的视图
通过视图更新数据的场景比较少,大家只是了解下视图可以更新就行了。
5、视图加密
视图加密有什么好处呢?
假如有一个黑客,破解了数据库,然后他想调用系统存储过程 sp_help 看一下视图的内容。这时候会得到 一个信息,文本已加密。