【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)将复 ...
随机推荐
- MyBatis实例教程--开发环境搭建
MyBatis实例教程--开发环境搭建 准备工作: 1.mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包 ...
- ssh问题_1
昨天配置了虚拟机的ssh,可以相互连接,但是今天早上就不行了,遇到如下错误 [slave1@hadoop ~]$ scp .ssh/id_rsa.pub master@hadoop.master:~/ ...
- 下拉框select chosen被遮盖
最简单的就是让容器高度大点. 用js调整也行. 为什么z-index不管事,看下面... 浏览器支持 所有主流浏览器都支持 z-index 属性. 注释:任何的版本的 Internet Explore ...
- 【原创】Sagger使用
Swagger使用 1. Spring MVC配置文件中的配置 <mvc:annotation-driven/> <context:component-scan base-packa ...
- charles和Fiddler感觉哪个更好用
1.fiddler还可以抓HTTPS的包,解析出来都可以 2.charles更直观,可能是我先用charles的缘故.charles遍历一个站点,可以右键另存,保存全站文件资源.扒站首选, c ...
- zTree删除节点
zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. zTree删除节点. <!DOCTYPE html> &l ...
- 如何在自家厨房里制作LSD
如何在自家厨房里制作LSD -------------------------------------------------------------------------------- D-麦角酸 ...
- [codeforces] 633C Spy Syndrome 2
原题 Trie树+dp 首先,我们可以简单的想到一种dp方式,就是如果这一段可以匹配并且可以与前一段接上,那么更新dp[i]为当前字符串的编号,然后倒推就可以得到答案. 但是,显然我们不能O(m)比较 ...
- 【NOIP 模拟赛】区间第K大(kth) 乱搞
biubiu~~~ 这道题就是预处理,我们就是枚举每一个数,找到左边比他大的数的个数以及其对应的区间,右边也如此,我们把左边的和右边的相乘就得到了我们的答案,我们发现这是O(n^3)的,但是实际证明他 ...
- How to reclaim space in InnoDB when innodb_file_per_table is ON
When innodb_file_per_table is OFF and all data is going to be stored in ibdata files. If you drop so ...