数据库原理与应用 第 7 章 · 上机一
课程第 7 章上机一 认认门建视图不存数据多表视图套一层看定义撞重名连起来 版式
第 7 章 视图和索引 · 上机一

建视图与查视图

七道题,从建第一个视图做到套两层,再亲手验证一次视图不存数据。
已完成 0 / 7
本 次 上 机 题 目
  1. 01先看清楚库里有什么
  2. 02建第一个视图,再和原查询对着看
  3. 03改基本表,看视图跟不跟着变
  4. 04把三张表拼成一张虚拟表
  5. 05在视图上再建一个视图
  6. 06两条命令看视图长什么样
  7. 07同名的视图不许建第二个
  8. 连续练习:自己建三个视图
01
第 7 章 · 上机一

先看清楚库里有什么

五张表,八个学生,一个视图都还没有。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

SHOW FULL TABLES 多一列 Table_type,等会儿建了视图就能看出区别。

知道更多

这台终端是真解释器,视图真的按定义临时算,改动会一直留到你按重置为止。

想一想

信息学院一共有几个学生?

02
第 7 章 · 上机一

建第一个视图,再和原查询对着看

视图查出来的东西,和它定义里那句 SELECT 一模一样。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

中间两条结果完全一样,视图干的就是把下面那句话包起来起个名字。

练一练

CREATE VIEW 执行完,s_view 里存了几行数据?
  1. A4 行
  2. B8 行
  3. C一行都没存
答案 C

视图只把那句 SELECT 记下来,数据始终在基本表 s 里。

03
第 7 章 · 上机一

改基本表,看视图跟不跟着变

视图建好之后一个字没改,可它查出来的行数变了。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

三次计数是四、五、四,视图自己没动,动的一直是基本表。

记牢它记住这一句

  1. 视图是窗户
  2. 不是快照
  3. 每次都现算

想一想

如果视图是快照,第三次计数会是几?

04
第 7 章 · 上机一

把三张表拼成一张虚拟表

学号、姓名、课程名、成绩本来分在三张表里。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

视图名后面那四个名字是给视图的列另起的名,DESCRIBE 出来的就是它们。

知道更多

不写这四个名字也能建,那视图的列名就是查询里那几个字段原来的名字。

05
第 7 章 · 上机一

在视图上再建一个视图

第二层从第一层里挑,挑出来的一定是第一层的子集。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

两条一起看,第二层的两行确实都在第一层的四行里面。

想一想

查一次 s_maj_view,机器一共要跑几句 SELECT?

06
第 7 章 · 上机一

两条命令看视图长什么样

一条看它有哪几列,一条看它当初那句定义。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

DESCRIBE 对视图和对表回显长得一模一样,这就是视图用起来像表的证据。

知道更多

SHOW CREATE VIEW 回显里那串 ALGORITHM 与 DEFINER 是真机自动补的。

07
第 7 章 · 上机一

同名的视图不许建第二个

先撞一次 1050,再用 OR REPLACE 覆盖过去。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条要留意,第一层视图一改,架在它上面的第二层跟着变成了空。

练一练

s_view 改成理学院之后,s_maj_view 为什么查不出行?
  1. A它被自动删掉了
  2. B理学院里没有计算机专业的学生
  3. C视图不能套两层
答案 B

第二层从第一层里挑,第一层只剩理学院的人,里面没有计算机专业的。

第 7 章 · 上机一

连续练习:自己建三个视图

不看上面的答案,从头写一遍这三个视图。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲命令就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第三个视图带了分组,能查但改不了数据,下一次上机第 5 题会撞到这一点。

知道更多

写不出来就回到讲义第 7 页和第 8 页,把那三个例子再敲一遍。

保山学院·人工智能教研室·曹鼎鼎