您的位置:首页 > 数据库

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. 适当利用视图可以更清楚的表达查询
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库