MySQL组成之视图

1.视图概述

视图是从一个或几个基本表(或视图)导出的表。

视图是一个虚表,意思就是说,数据库中只存了视图的表结构,而没有存放视图的数据。

75674d4b574a45e8a362e8072a78b977.jpg

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:

SnoSnameSage
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)能够对机密数据提供安全保护

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值