【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)将复 ...
随机推荐
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- JavaSE复习(七)Stream流和方法引用
Stream流 全新的Stream概念,用于解决已有集合类库既有的弊端. 传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作.而当我们 ...
- HDU 1398 Square Coins 整数拆分变形 母函数
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- 【EasyNetQ】- 发送接收
发布/订阅和请求/响应模式是位置透明的,因为您不需要指定消息的使用者所在的位置,而发送/接收模式专门用于通过命名队列进行通信.它也不会假设可以通过队列发送的消息类型.这意味着您可以通过同一队列发送不同 ...
- Hibernate配置文件说明
<property name="hbm2ddl.auto">create</property> create - 启动Hibernate前先删除表,重新创建 ...
- number 解题报告
number 题目描述 给定整数 \(m,k\),求出正整数 \(n\) 使得 \(n+1,n+2,-,2n\) 中恰好有 \(m\) 个数在二进制下恰好有 \(k\) 个 \(1\). 有多组数据. ...
- BZOJ 3262: 陌上花开 CDQ
这个题大部分人用了离散然后水之,然而.....作为一只蒟蒻我并没有想到离散,而是直接拿两个区间一个对应n,一个对应k来搞,当然这两个区间是对应的,我把第一维排序,第二维CDQ,第三维树状数组,然而由于 ...
- vim插件修改背景颜色和代码颜色
ls /usr/share/vim/vim74/colorsblue.vim default.vim desert.vim evening.vim morning.vim pablo.vim READ ...
- 打造适合日常使用的ubuntu,以ubuntu 16.04.1 LTS为例(不涉及版本)
因为调试些程序需要用到ubuntu,又不喜欢虚拟机,因此装了双系统,在这过程中因为各种原因ubuntu来回安装过好多次,每次安装到用得爽都要捣鼓很久,也算稍微有点经验心得,将ubuntu调教的过程写在 ...
- hadoop之HDFS与MapReduce
Hadoop历史 雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 随后在2003 ...