- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.5.1 视图的定义和删除 一类不易扩充的视图 -以 SELECT * 方式创建的视图可扩充性差,应尽可能避免。 【例4.73】将所有已按期完成的抢修工程定义为一个视图。 CREATE VIEW s2_salvaging (prj_num,prj_name,start_date,end_date,prj_status) AS SELECT * FROM salvaging WHERE prj_status=1; 4.5.1 视图的定义和删除 语句格式: DROP VIEW 视图名 ; 注: 1)该语句从数据字典中删除指定的视图定义; 2)由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除. 3)删除基表时,由该基表导出的所有视图定义均已不能使用,都必须显式删除。 2. 删除视图 4.5.1 视图的定义和删除 【例4.74】删除视图S1_Stock。 DROP VIEW S1_Stock; DROP VIEW S3_Stock; 注:S1_Stock和S3_Stock必须同时删除,否则虽然S3_Stock的定义仍在数据字典中,但已无法正常使用。 4.5.2 查询视图 从用户角度: -查询视图与查询基本表相同. 注: (一般情况下)视图可以像基本表那样使用; 视图名可以出现在关系名可以出现的地方; DBMS将视图转换成对基本表的操作。 4.5.2 查询视图 DBMS实现视图查询的方法: 视图消解法(View Resolution) 1)进行有效性检查,检查查询的基本表、视图是否存在; 2)如果存在,从数据字典中取出视图的定义,把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询; 3)执行修正后的查询。 4.5.2 查询视图 【例4.75】 在供电局1#仓库的物资视图s1_stock中找出单价小于20的物资名称、规格和单价。 SELECT mat_name,speci, unit FROM s1_stock WHERE unit20; 转换后的查询语句为: SELECT mat_name,speci, unit FROM stock WHERE warehouse =供电局1#仓库 AND unit20; 4.5.2 查询视图 【例4.76】 查询使用了供电局1#仓库物资的抢修工程项目号。 SELECT distinct prj_num FROM s1_stock, out_stock WHERE s1_stock.mat_num=out_stock.mat_num; 转换后的查询语句为: SELECT distinct prj_num FROM stock, out_stock WHERE warehouse =‘供电局1#仓库’ AND stock.mat_num=out_stock.mat_num; 4.5.2 查询视图 视图消解法的局限:有些情况下,视图消解法不能转换成正确查询,则查询时会出现问题。 【例4.77】 查询所存物资种类大于2的仓库名称。 SELECT warehouse FROM s4_stock WHERE counts2; 转换后的查询语句为: SELECT warehouse FROM stock WHERE COUNT(mat_num) 2 GROUP BY warehouse; 正确: SELECT warehouse FROM stock GROUP BY warehouse HAVING COUNT(mat_num) 2; 错误! 4.5.3 更新视图 用户角度:更新视图与更新基本表相同 DBMS实现视图更新的方法: 视图消解法(View Resolution) 指定WITH CHECK OPTION子句后 DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新。 4.5.3 更新视图 【例4.78】 将供电局1#仓库的物资视图s1_stock中编号为m001的物资库存量改为100。 UPDATE s1_stock SET amount =100 WHERE mat_num = m001; 转换后的语句: UPDATE stock SET amount =100 WHERE warehouse =供电局1#仓库 AND mat_num = m001; 4.5.3 更新视图 【例4.79】向供电局1#仓库的物资视图s1_stock中插入一个新的物资记录,其中物资编号为“m021”,物资名称为“护套绝缘电线”, 规格为“BVV-150”,数量为1
文档评论(0)