博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SQL】视图
阅读量:5280 次
发布时间:2019-06-14

本文共 1603 字,大约阅读时间需要 5 分钟。

一、虚拟视图

由create table定义的表:以物理形式存在,实际存储在数据库中

视图虚拟的,并不是一个真正存在的表

1.视图定义

CREATE VIEW <视图名> AS <视图定义>

例1.

CREATE VIEW ParamountMovies AS    SELECT title, year    FROM Movies    WHERE studioName = 'Paramount';

例2.涉及多个表

CREATE VIEW MovieProd AS    SELECT title, name    FROM Movies, MovieExec    WHERE producerC# = cert#;

 

例3.涉及属性重命名

CREATE VIEW MovieProd(movieTitle, prodName) AS    SELECT title, name    FROM Movies, MovieExec    WHERE producerC# = cert#;

 

 

2.视图查询

跟查询普通的表一样。

 

3.视图更新

理论上,视图的更新没有意义,因为它是虚拟的。

但是,特别简单的视图可以更新,其本质是更新了与视图相关的实体表。

3.1视图删除

DROP VIEW ParamountMovies;

删除视图不会影响实体表,但是删除了实体表会导致相应的视图不可用。

3.2可更新视图

只有简单的视图才可以更新,说白了,就是视图简单到可以更新视图的数据明确的找到实体表应该调整的地方,让实体表做真正的更新。

可更新视图的条件:

1.视图仅从单个关系R中选出

2.用SELECT而非SELECT DISTINCT选出

3.WHERE 子句中不能使用R

4.SELECT中的属性必须足够多,保证对R插入时可以通过默认值的填充剩下的值。

语句跟普通的插入更新语句相同。

3.3更新视图时的不合理现象

对下面的视图:

CREATE VIEW ParamountMovies AS    SELECT title, year    FROM Movies    WHERE studioName = 'Paramount';

采用插入操作

INSERT INTO ParamountMoviesVALUES('Star Trek',1979);

由于并没有在插入时指明studioName = 'Paramount',导致插入到实体表R中的语句无法在视图中被检索出来。这是显然不合理的。

解决方法:

1.定义视图时就把studioName属性加入

2.采用替换触发器

CREATE TRIGGER ParamountInsertINSTEAD OF INSERT ON ParamountMoviesREFERENCING NEW ROW AS NewRowFOR EACH ROWINSERT INTO Movies(title, year, studioName)VALUES(NewRow.title, NewRow.year, 'Paramount');

INSTEAD OF表明替换:即原本的操作不会被执行,而是执行触发器中的动作!

 

二、物化视图

物化视图:把视图存储在存储空间中,让视图不在是虚拟的。

物化视图的维护:

1.定期维护:比如每24小时重新生成一次,在实时性要求不高时可以采用

2.增量维护:当基本表变化时,根据其变化情况对物化视图做少量的修改。不用重新生成整个表。

物化视图的生成、维护也需要代价,但是在多个表连接查询等情况,用物化视图可以减少时间的消耗。

用物化视图代替基本表也有很多的要求,本质是保证查询不会出错。

具体物化视图的知识还需要再学习。

转载于:https://www.cnblogs.com/dplearning/p/4887965.html

你可能感兴趣的文章
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>