当前课程知识点:数据库概论 >  第四章 数据库完整性、视图与安全性 >  4.5 视图 >  视图

返回《数据库概论》慕课在线视频课程列表

视图在线视频

视图

下一节:安全性

返回《数据库概论》慕课在线视频列表

视图课程教案、知识点、字幕

同学们好

我是来自云南大学软件学院的包崇明

下面为大家介绍视图

在构造复杂查询的时候

我们经常用到子查询

查询语句冗长且复杂

难以理解

我们知道子查询得到的结果

也是以表的形式表示

如果能将子查询得到的结果命名为一张表

这张表可出现在select语句

的from子句后

那将为我们构造复杂查询带来很多方便

现在我们给出视图的定义

视图是一个由子查询产生的表

它可以有自己的名字和自己的字段名

对于用Create Table语句创建的表

我们称为基础表

在大多数情况下

视图可以象基础表一样使用

也就是说

基础表出现的地方

一般都可以使用视图

虽然使用方法基本一样

视图和基础表还是有区别

基础表中的数据存储在磁盘文件中

但是视图的数据依赖于基础表

并没有单独存放在磁盘中

需要执行查询才能获得视图数据

是一个由基础表中选择出来的

数据组成的逻辑窗口

所以视图又称为虚拟表

如果在视图上面执行更新操作

会出现什么情况

我们知道视图的数据

没有单独存放在磁盘文件当中

仅仅是一个查询结果

对查询结果进行更新

需要转换为对查询的基础表进行更新

如果我们能够确定转换为

对哪些基础表的哪些字段进行更新

这类视图就可以执行更新操作

称为可更新视图

多数情况下

由于我们不能确定对视图的更新

最终需要进行更新的基础表和字段

所以大多数视图是不可执行更新操作的

现在我们来看一下视图的定义语句

定义一个视图需要使用

CREATE VIEW语句

然后指定所创建的视图的名称

我们可以指定视图的列名列表

但这不是必须的

如果没有指定列名列表

创建的视图将使用子查询结果

中去除限定词后的列名作为字段名

如果这些列名中有相同的

则需要指定相应的视图字段名

以保证视图的字段名不重复

如果子查询结果中有表达式列

视图也需要指定表达式列的字段名

关键词as后面

是定义视图的子查询语句

也就是select语句

一般不允许在定义视图的

子查询中出现order by子句

最后是可选的

WITH CHECK OPTION子句

如果在视图定义中出现

WITH CHECK OPTION子句

首先要求创建的视图是可更新视图

其次如果在该视图上执行的

Insert或Update操作会

导致在基础表上更新了数据

但视图数据中找不到更新数据的情况

那么这些Insert和Update操作

将不允许执行

现在来看几个视图的例子

第一个例子是创建一个名为

cities的视图

列出customers表和

agents表中所有配对的城市

ccity和acity

要求居住在acity的代理商

为居住在ccity的顾客

至少下过一份订单

创建视图是语句是

CREATE VIEW cities ( ccity, acity )

AS SELECT c.city, a.city

FROM customers c, agents a, orders o

WHERE c.cid = o.cid and a.aid = o.aid;

注意在上述语句中我们给视图cities

指定了对应于子查询中的限定列名

c.city和 a.city的字段名

ccity和acity

如果我们在上述语句中删除指定的

视图列名表( ccity, acity )

则上述创建视图的语句将失败

因为去除子查询结果表的列名

c.city和 a.city的限定符

c和a后

列名都是city

意味着创建的视图具有两个同名字段

所以这是一个不合法的视图定义

下面再看一个视图的例子

CREATE VIEW custs

AS SELECT *

FROM customers

WHERE discnt <= 15.0

WITH CHECK OPTION

上述语句定义了一个从顾客信息表中

选择所有折扣小于等于15的顾客

组成的名为custs的视图

在custs视图定义语句中

我们没有指定custs的列名

意味着custs的列名

将继承子查询结果表的列名

在这个例子中也就是顾客信息表的列名

这是一个可更新视图

因为在这个视图上执行更新操作

能够确定转换为对顾客信息表的更新

语句中选项WITH CHECK OPTION

将让满足discnt >15.0 条件的

更新失败

因为更新的数据对视图是不可见的

我们在视图上插入一个CID为c009

折扣discnt为16的顾客

由于WITH CHECK OPTION选项的存在

这个insert操作将失败

因为插入的这个顾客的信息

对视图custs不可见

所以插入失败

总结一下

视图是一种重要的技术

具有下列作用

1. 视图提供了一种方法

使复杂的

经常用到的查询写起来更容易

2. 视图提供了一种数据组织方式

允许遗留程序能够继续执行

3. 视图提供了一种安全措施

使数据能够以不同的表示形式

提供给不同的用户

好了这节课的内容到这就结束了

我们下节课再见

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

视图笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。