《数据库原理及应用(第二版)》课件 第7章 数据库高级对象的使用.pptx

《数据库原理及应用(第二版)》课件 第7章 数据库高级对象的使用.pptx

第7章数据库高级对象的使用;本章要点;一、视图;可以通过CREATEVIEW语句来创建视图,其基本语法如下:

CREATEVIEW视图名[(视图字段列表)]

AS查询语句

[WITHCHECKOPTION];

其中,WITHCHECKOPTION强制针对视图执行的所有数据修改语句都必须符合在“查询语句”中设置的条件。通过视图修改行时,WITHCHECKOPTION可确保提交修改后,仍可通过视图看到数据。视图字段列表如果省略,将使用查询语句返回的字段名。查询语句返回的字段必须有字段名且唯一。;【例7-1】已知学生表student的数据如图所示。;可以通过视图修改数据,如:

UPDATEvw_dept1SETbirthday=2007-8-12WHEREsno=2023019001

由于视图只是一个查询,并不保存数据,所以对视图数据的修改其实是对基表数据的修改。;在创建视图时可以加一个“WITHCHECKOPTION”选项,这样对视图修改时,必须满足视图创建时SELECT语句中的WHERE条件。;【例7-2】显示购物者的名字、所订购的玩具的名字和订购数量

CREATEVIEWvwOrders

AS

SELECTShopper.vShopperName,vToyName,siQtyFROMShopper

JOINOrdersONShopper.cShopperId=Orders.cShopperId

JOINOrderDetailONOrders.cOrderNo=OrderDetail.cOrderNo

JOINToysONOrderDetail.cToyId=Toys.cToyId;【例7-3】显示购物者的名字、所订购的玩具的名字和订购数量,以中文显示字段名,语句如下:

CREATEVIEWv_wOrders(购物者名字,玩具名字,订购数量)

WITHENCRYPTION

AS

SELECTShopper.vFirstName,vToyName,siQtyFROMShopperJOINOrders

ONShopper.cShopperId=Orders.cShopperId

JOINOrderDetail

ONOrders.cOrderNo=OrderDetail.cOrderNo

JOINToysONOrderDetail.cToyId=Toys.cToyId;通过视图管理数据,应该注意以下情况:

如果修改将影响多个基本表,则不能在视图中一次性修改多个基表的数据,否则可以。

不能修改那些内容为计算结果的列,例如,一个经过计算的列或一个集合函数。

视图引用多个表时,无法用DELETE命令删除数据。

确认那些不包括在视图列中但属于表的列,是否允许NULL值或有缺省值的情况。;【例7-5】vwOrderWrapper视图定义如下:

CREATEVIEWvwOrderWrapper

AS

SELECTcOrderNo,cToyId,siQty,vDescription,mWrapperRate

FROMOrderDetailJOINWrapper

ONOrderDetail.cWrapperId=Wrapper.cWrapperId

要通过视图更新siQty和mWrapperRate时,使用

UPDATEvwOrderWrapperSETsiQty=2,mWrapperRate=mWrapperRate+1WHEREcOrderNo=000001

命令系统会出错,因为siQty和mWrapperRate分别属于OrderDetail和Wrapper表中,不能同时修改多个基本表。

必须修改为:

UpdatevwOrderWrapperSETsiQty=2WHEREcOrderNo=000001;

UpdatevwOrderWrapperSETmWrapperRate=mWrapperRate+1WHEREcOrderNo=000001;;视图的优点:

1.视点集中

用户只关心它感兴趣的某些特定数据和他们所负责的特定任务。

2.简化操作

视图大大简化了用户对数据的操作。因为在定义视图时,若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。

3.定制数据

视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档