【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)将复 ...
随机推荐
- [leetcode-636-Exclusive Time of Functions]
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- HDU 4587 TWO NODES(割点)(2013 ACM-ICPC南京赛区全国邀请赛)
Description Suppose that G is an undirected graph, and the value of stab is defined as follows: Amon ...
- C#中async和await用法
.net 4.5中新增了async和await这一对用于异步编程的关键字. async放在方法中存在await代码的方法中,await放在调用返回Task的方法前. class Class1 { pr ...
- Linux 监测系统资源
Top;1; Linux监控磁盘性能 yum install sysstat iostat -x 1 %util:磁盘使用io所占百分比
- 【历史】- Unix英雄传:图文细数十五位计算机先驱
Unix,一款多任务多用户操作系统,最早由AT&T公司员工及合作伙伴在贝尔实验室于1969年开发完成.Unix的衍生及克隆版本包括Berkeley Unix.Minix.Linux.AIX.A ...
- 在es中用scroll查询与completableFuture
一般而言,es返回数据的上限是10000条,如果超过这个数量,就必须使用scroll查询. 所谓scroll查询就类似DBMS中的游标,或者快照吧,利用查询条件,在第一次查询时,在所有的结果上形成了一 ...
- Storm之详解spout、blot
1.Topology的构造backtype.storm.topology.TopologyBuilder 2.Spout组件的编写实现接口 backtype.storm.topology.IRichS ...
- springMVC笔记二
第十四章 springmvc快速入门(注解版本) 1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb ...
- 判断腾讯QQ是否在线
http://webpresence.qq.com/getonline?Type=1&1617052138: 判断腾讯QQ是否在线接口. 下面是个简单的例子: <!doctype htm ...
- Codeforces Round #401 (Div. 1) C(set+树状数组)
题意: 给出一个序列,给出一个k,要求给出一个划分方案,使得连续区间内不同的数不超过k个,问划分的最少区间个数,输出时将k=1~n的答案都输出 比赛的时候想的有点偏,然后写了个nlog^2n的做法,T ...