首页 > 其他 > 详细

02-视图

时间:2020-09-06 19:52:12      阅读:70      评论:0      收藏:0      [点我收藏+]

简述

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。

视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。

  • 重用 SQL 语句
  • 简化复杂的 SQL 操作,不必知道它的查询细节
  • 保护数据,提高安全性

定义视图

SQL 语言用 CREATE VIEW 命令建立视图,其一般格式为

CREATE VIEW <视图名> [(<列名> [, <列名>] ...)]
AS <子查询>
[WITH CHECK OPTION];
  • 其中,子查询可以是任意的 SELECT 语句。
  • WITH CHECK OPTION 表示对视图进行 UPDATE、INSERT 和 DELETE 操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
  • 组成视图的属性列名或者全部省略或者全部指定,没有第 3 种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中 SELECT 子句目标列中的诸字段组成。
  • 举例:查询姓名中包含a字符的员工名、部门名和工种信息
    技术分享图片

删除视图

语句的格式为:DROP VIEW <视图名> [RESTRICT | CASCADE];

视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其他视图,则使用 CASCADE 级联删除语句把该视图和由它导出的所有视图一起删除。

基本表删除后,由该基本表导出的所有视图均无法使用了,但是视图的定义没有从字典中清除。删除这些视图的定义需要显式地使用 DROP VIEW 语句。

查询视图

CREATE VIEW 语句的结果只是把视图的定义存入数据字典,并不执行其中的 SELECT 语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。

查看视图的创建语句:SHOW CREATE VIEW <视图名>;

DBMS 执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为”视图消解“。

  1. 创建视图 v1,要求查询电话号码以 ‘011‘ 开头的员工姓名、工资和邮箱
    技术分享图片
  2. 创建视图 v2,要求查询部门的最高工资大于 12000 的部门信息
    技术分享图片

更新视图

更新视图是指通过视图来插入、删除和修改数据。

由于视图是不实际存储的虚表,因此对视图的更新最终要转换为对基本表的更新。像查询视图那样,对视图的更新操作也是通过视图消解,转换为对基本表的更新操作。

在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成相应基本表的更新。一般地,行列子集视图是可更新的。

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的。

  • 包含以下关键字的 SQL 语句:分组函数、distinct、group by、having、union 或者 union all
  • 常量视图
  • SELECT 中包含子查询
  • JOIN
  • FROM 一个不能更新的视图
  • WHERE 子句的子查询引用了 FROM 子句中的表

02-视图

原文:https://www.cnblogs.com/liujiaqi1101/p/13622786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!