数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)(三)

简介: 数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)(三)

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

基本表中的数据改变,视图中的数据也会发生改变。

[例3.85] 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。

CREATE VIEW V_IS_Student
AS
    SELECT Sno, Sname, Sage
    FROM student
    WHERE Sdept = 'IS'
WITH CHECK OPTION ;
SELECT * FROM V_IS_Student;

  • 由于在定义视图时加上了WITH CHECK OPTION子句,以后对该视图进行插入、修改和删除操作时,关系数据库管理系统会自动加上Sdept='IS’的条件

若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图

视图不仅可以建立在单个基本表上,也可以建立在多个基本表上

[例3.86] 建立信息系选修了1号课程的学生的视图(包括学号、姓名、成绩)。

插入数据:

insert into SC
values ('201215125', 1, 92),
       ('201215121', 2, 85),
       ('201215121', 3, 88),
       ('201215122', 2, 90),
       ('201215122', 3, 80);
SELECT * FROM SC;
# 创建或者替换
CREATE OR REPLACE VIEW IS_S1(Sno, Sname, Grade)
AS
    SELECT student.Sno, Sname, Grade
    FROM student, sc
    WHERE sc.Sno = student.Sno AND
          student.Sdept = 'IS';
SELECT * FROM IS_S1;

由于视图 IS_S1 的属性列中包含了Student 表与SC表的同名列Sno,所以必须在视图名后面明确说明视图的各个属性列名

视图可以建立在一个或多个已定义好的视图上,或建立在基本表与视图上

[例3.87] 建立信息系选修了 1号课程且成绩在90分以上的学生的视图。

CREATE VIEW IS_S2
AS
SELECT Sno, Sname, Grade
FROM IS_S1
WHERE Grade>90;
SELECT * FROM IS_S2;

由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要设置一些派生属性列

这些派生属性由于在基本表中并不实际存在,也称它们为虚拟列

带虚拟列的视图也称为带表达式的视图

[例3.88] 定义一个反映学生出生年份的视图。

CREATE VIEW BT_S(Sno, Sname, Sbirth)
AS
SELECT Sno, Sname, 2022-Sage
FROM student;
SELECT * FROM BT_S;

还可以用带有聚集函数和GROUP BY子句的查询来定义视图,这种视图称为分组视图

[例3.89] 将学生的学号及平均成绩定义为一个视图。

CREATE VIEW S_G(Sno, Gavg)
AS
SELECT Sno, AVG(Grade)
FROM sc
GROUP BY Sno;
SELECT * FROM S_G;

如果以后修改了基本表的结构,视图的映像关系就会被破坏,该视图就不能正常工作了。为避免出现这类问题,最好在修改基本表之后删除由该基本表导出的视图,然后重建这个视图。

2. 删除视图

该语句的格式为:

DROP VIEW 视图名 [CASCADE];
  • 视图删除后视图的定义将从数据字典中删除。
  • 如果该视图上还导出了其他视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。
  • 基本表删除后,由该基本表导出的所有视图均无法使用了,但是视图的定义没有从字典中清除。
  • 删除这些视图定义需要显式地使用DROP VIEW语句。

[例3.91]删除视图BT S和视图IS_ S1:

DROP VIEW bt_s;
DROP VIEW is_s1; # mysql不会拒绝执行
DROP VIEW is_s1 CASCADE; # is_s2没有被删除

3.7.2 查询视图

视图定义后像基本表那样查询。

关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图等是否存在。

如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解

但是有些情况下,这种转换不能直接进行,查询时会出现问题。(视图消解法的局限性)

MySQL可以进行正确的转换( 8.0 )

SELECT *
FROM S_G
WHERE Gavg>90;

定义视图并查询视图与基于派生表的查询是有区别的。

视图一旦定义,其定义将永久保存在数据字典中,之后的所有查询都可以直接引用该视图。而派生表只是在语句执行时临时定义,语句执行后该定义即被删除

3.7.3 更新视图

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

由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。

对视图的更新操作也是通过视图消解,转换为对基本表的更新操作。

为防止用户通过视图对数据进行增加、删除、修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。

这样在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。

[例3.96] 向信息系学生视图IS_ Student 中插入-一个新的学生记录,其中学号为“201215129”,姓名为“赵新”,年龄为20岁。

INSERT INTO V_IS_Student
VALUES ( '201215129', '赵新', 20 );

mysql会插入失败,因为插入该数据时,系为null,与视图建立的条件(视图中的学生为信息系的),会发生冲突,with check option会进行插入检查,所以插入失败。

一般行列子集视图是可以进行更新的。行列子集视图只是基本表的选择或投影。

3.7.4 视图的作用

  • 1.视图能够简化用户的操作
  • 2.视图使用户能以多种角度看待同一数据
  • 3.视图对重构数据库提供了一定程度的逻辑独立性
  • 4.视图能够对机密数据提供安全保护
  • 5.适当利用视图可以更清晰地表达查询


相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
169 3
|
20天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
16 2
|
1月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
1月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
27天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
1月前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
1月前
|
SQL 存储 数据采集
如何把问卷录入SQL数据库
将问卷数据录入SQL数据库是一个涉及数据收集、处理和存储的过程
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
1月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响

热门文章

最新文章