【SQL】视图
一、虚拟视图
由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 ParamountMovies
VALUES('Star Trek',1979);
由于并没有在插入时指明studioName = 'Paramount',导致插入到实体表R中的语句无法在视图中被检索出来。这是显然不合理的。
解决方法:
1.定义视图时就把studioName属性加入
2.采用替换触发器
CREATE TRIGGER ParamountInsert
INSTEAD OF INSERT ON ParamountMovies
REFERENCING NEW ROW AS NewRow
FOR EACH ROW
INSERT INTO Movies(title, year, studioName)
VALUES(NewRow.title, NewRow.year, 'Paramount');
INSTEAD OF表明替换:即原本的操作不会被执行,而是执行触发器中的动作!
二、物化视图
物化视图:把视图存储在存储空间中,让视图不在是虚拟的。
物化视图的维护:
1.定期维护:比如每24小时重新生成一次,在实时性要求不高时可以采用
2.增量维护:当基本表变化时,根据其变化情况对物化视图做少量的修改。不用重新生成整个表。
物化视图的生成、维护也需要代价,但是在多个表连接查询等情况,用物化视图可以减少时间的消耗。
用物化视图代替基本表也有很多的要求,本质是保证查询不会出错。
具体物化视图的知识还需要再学习。
【SQL】视图的更多相关文章
- SQL视图&触发器
SQL视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数 ...
- 关于SQL视图的创建和使用方法
SQL视图的创建和使用 视图这个东西在其他的软件中,我们也经常看得到,例如word中就有视图,我们不难发现,视图似乎是一种显示方式,就像WORD一样,有几种显示版面,这就是视图,那么SQL中的视图又该 ...
- ylb:SQL 视图(View)基础
ylbtech-SQL Server: SQL Server-SQL 视图(View)基础 SQL 视图(View)基础. 1,ylb:视图(View)基础返回顶部 -- ============== ...
- SQL 视图(Views)
SQL 视图(Views) 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列 ...
- GeoServer 查询sql视图
说明: 最近项目中遇到一个需求,需要统计管网的长度,但管网数据量非常大,前端用openlayers接口统计直接就奔溃了. 后尝试使用调后台接口查数据库的方式,虽然可行但是又要多一层与后台交互的工作. ...
- sql 视图的用法
在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联 ...
- 多语言架构下如何正确的使用SQL视图
产品的定位 做产品的都知道,是否支持多语言直接影响到产品的定位问题. 如果一个产品周期是一年的话,要完美支持多语言最少也得在加3个月!所需时间和页面数量.数据库表的数量和表的数据量成正比. 可以看出代 ...
- sql视图实例
一个视图是一个或一组SQL语句,存储在数据库中相关的名称.一个视图实际上是一个预定义的SQL查询中的表的形式组成. 一个视图可以包含一个表的所有行,或选择表中的行.从一个或多个表上写SQL查询创建一个 ...
- 简单的3个SQL视图搞定所有SqlServer数据库字典
网上有很多SQL SERVER数据库字典的SQL语句,七零八落,我在工作整理了一下思路,总结SQL代码如下.数据库字典包括表结构(分2K和2005).索引和主键.外键.约束.视图.函数.存储过程.触发 ...
- sql视图学习笔记--视图
视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性. (2)隐藏表结构.创建多种形式的数透视,满足不同用户需求. (3)将复 ...
随机推荐
- POJ 3076 / ZOJ 3122 Sudoku(DLX)
Description A Sudoku grid is a 16x16 grid of cells grouped in sixteen 4x4 squares, where some cells ...
- poj1789 Truck History最小生成树
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20768 Accepted: 8045 De ...
- zuoyebiji
- JSP表单提交出现中文乱码的解决方法
1)post方式 在servlet的doGet( ) doPost( ) 中增加以下代码: response.setContentType("text/html;charset=utf- ...
- elasticsearch集群及filebeat server和logstash server
elasticsearch集群及filebeat server和logstash server author:JevonWei版权声明:原创作品blog:http://119.23.52.191/ 实 ...
- JS格式化 /Date(xxxxxx)/的日期类型
//用来转换/Date(xxxxxx)/类型的JSON日期为要求的日期格式字符串String.prototype._formatJsonDate = function (format) { var s ...
- BZOJ day2
十六题...(好难啊) 1051105910881191119214321876195119682242243824562463276128184720
- 如何让spring源码正常的部署在idea中
我在这里把我从GitHub下载的源码成功编译之后的文件放在了我的百度网盘上大家可以直接下载,也可以按如下步骤自己编译部署到idea中, 下载的地址是:http://pan.baidu.com/s/1d ...
- visio2013安装提示找不到Office.zh_cn\officeMUI.mis officemui.xml(转)
windoes10 已经安装office2013后,想安装Visio2013,报错如题所示.解决方法我采用的是方法二:解压缩office2013的ISO包,解压缩Visio2013的ISO包,安装Vi ...
- CMU Bomblab 答案
室友拉我做的... http://csapp.cs.cmu.edu/3e/labs.html Border relations with Canada have never been better. ...