3-5视图
2016-06-30 13:14
183 查看
3-5视图
tags:数据库概念
视图是从一个或者几个基本表导出的表.它域基本表不同,是一个虚表.数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表中,所以一旦基本表中的数据发送变化,从视图中查询出的数据也就随之改变了.创建视图
create view <视图名>[(<列名>[,<列名>]..)]as <子查询>
[with check option]
其中子查询可以是任意的select
with check option 表示对视图进行update insert 和delete 操作时要保证更新、插入或者删除的行满足视图定义中的谓词条件.
在下列情况下必须指定组成视图的所有列名
1. 某个目标列不是单纯的属性名,而是聚集函数或者列表达式
2. 夺标连接时选出了几个同名列作为视图的字段
3. 需要在视图中为某个列启用新的更合适的名字.
根据形成的不同视图分为
1. 行列子集视图,若一个视图是icong单个基本表导出的,并且只是去掉了基本表的某些行和列,但是保留了主码,则称这类视图为行列子集视图.
2. 虚拟列的视图,定义基本表时,为了减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据.一般是不存储的.由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要设计一些派生属性列.这些派生属性由于在基本表中并不实际存在,也称他们为虚拟列.带虚拟列的视图也成为带表达式的视图.
3. 分组视图,视图中的某些列通过group by 子句得到.
视图查询
视图消解:关系数据库管理系统对数据库查询时,首先检查有效性,检查查询中设计的表,视图是否存在.如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来.转换成等价的对基本表的查询,然后再执行修正了的查询.视图更新
一般的,行列子集视图是可以更新的,有些视图理论上是可以更新的,但是每个数据库的实现是不同的.例如DB2规定:
1. 若视图是由两个以上基本表导出的,则这个视图不允许被更新.
2. 若视图的字段来自字段表达式或者常数,则不允许对视图执行insert和update操作,但允许执行执行delete操作
3. 若视图的字段来自聚集函数,则此视图不允许更新。
4. 若视图的定义中含有groupby 子句,则视图不允许更新。
5. 若视图定义中含有distinct 短语,则此视图不允许更新。
6. 若视图定义中有嵌套查询,并且内层查询的from子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。
7. 一个不允许更新的视图上定义的视图也不允许更新。
不可更新视图域不允许更新的视图是两个不同的概念呢。前者是指理论上已经证明其是不可更新的视图,后者指实际系统中不支持更新,但它本身有可能是可更新的视图
视图的好处
好处:1. 简化用户操作
2. 让用户从多角度看待同一数据
3. 在一定程度上提高了数据库的逻辑独立性
4. 视图对机密数据提供安全保护
5. 适当利用视图可以更清楚的表达查询
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马