问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MySQL组成之视图

创作时间:
作者:
@小白创作中心

MySQL组成之视图

引用
CSDN
1.
https://blog.csdn.net/2302_80917420/article/details/139207496

1. 视图概述

视图是从一个或几个基本表(或视图)导出的表。视图是一个虚表,意思就是说,数据库中只存了视图的表结构,而没有存放视图的数据。

2. 定义视图

(1)创建视图

CREATE VIEW <视图名>[(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPINION];

其中,子查询可以是SELECT语句,但是子查询中不能包含ORDER BY和DISTINCT关键字。

WITH CHECK OPINION表示对视图进行UPDATE、INSERT、DELETE操作时要保证更新、插入、删除的操作满足视图定义中的谓词条件(即子查询中的条件表达式)。

若语句没有指定视图的列,则默认视图的列由SELECT语句中的各个字段组成,但是以下三种情况必须指明视图的列:

1.某个目标列不是单纯的属性名,而是集函数或列表达式;
2.多表连接时选出了几个同名的列作为视图的字段;
3.需要在视图中为某个列启用新的更适合得名字。

注意:组成视图的属性列名要么全部省略要么全部指定,没有第三种选择。

例如:

CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept = 'IS'
WITH CHECK OPINION;

在定义视图时加上了WITH CHECK OPINION 所以在对该视图进行插入、修改和删除时DBMS会自动加上Sdept = ‘IS’的条件。

创建以上视图实际上是创建了表1:

Sno Sname Sage
2020002 刘晨 19

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

例如:创建信息系选修了1号课程的学生的视图。

CREATE VIEW IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Sdept = 'IS' AND Student.Sno = SC.Sno AND SC.Cno = '1';

视图不仅可以建立在一个或多个基本表上,也可以建立在一个或多个已定义好的视图上,或同时建立在基本表和视图上,如:

创建信息系选修了1号课程且成绩在90分及以上的学生的视图:

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

注意:此视图是建立在IS_S1视图的基础之上的。

(2)删除视图

视图创建好之后,若导出此视图的基本表被删除了,该视图将失效。

删除语句:DROP VIEW <视图名>;

视图被删除,由该视图导出的其他视图也将失效,用户也应该将这些失效的视图删除。

3. 查询视图

视图建立好后,可以像对基本表一样对视图进行查询,对于基本表的查询语法一般可以用于视图。

首先要介绍一下“消解”的概念:由对视图的查询转换为对基本表的查询的过程称为“消解”。

(1)在信息系学生的视图中找出年龄小于20岁的学生。

SELECT Sno,Sage FROM IS_Student
WHERE Sage < 20;

DBMS在执行此查询时,将其与IS_Student视图定义中的子查询:

SELECT Sno,Sage FROM Student
WHERE Sdept = 'IS';--'IS'就是指信息系。

结合起来转换成对Student表的查询:

SELECT Sno,Sname,Sage
FROM Student WHERE Sdept = '计算机系' AND Sage < 20;

视图是定义在基本表上的虚表,它可以和其他表一起使用,实现连接查询或嵌套查询。也就是说,在关系数据库的三级模式结构中,外模式不仅包括视图,而且还可以包括一些基本表。

(2)查询信息系为1号课程的学生:

SELECT Sno,Sname FROM IS_Student,SC
**WHERE IS_Student.Sno = SC.Sno AND **
SC.Cno = '1';--SC是课程表,存放课程号,课程名信息。

4. 更新视图

更新视图是指用户通过视图对数据库中的数据进行插入(INSERT)、删除(DELETE)、修改(UPDATE)操作。

由于视图是不实际存在的虚表,对视图的更新最终要转化为对基本表的更新。

(1)将信息学生视图IS_Student中学号为2020002的学生姓名改成刘辰。

UPDATE IS_Student SET Sname = '刘辰'
WHERE Sno = '2020002';

与查询视图类似,DBMS执行此语句时,首先进行有效性检查,检查更新所涉及的表、视图等是否在数据库中存在,若存在,则从数据字典中取出该语句所涉及到视图的定义,把定义中的子查询和用户对视图的更新操作结合起来,转换成对基本表的更新,然后再执行这个经过修正的更新操作。

转换后的更新语句:

**UPDATE Student Set Sname = '刘辰' **
WHERE Sno = '2020002' AND Sdept = 'IS';

5. 视图的用途

(1)简化用户的操作

(2)使用户能以多种角度看待同一数据

(3)对重构数据库提供了一定程度的逻辑独立性

(4)能够对机密数据提供安全保护

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号