跳到主要内容

任务三 创建与查看视图

知识点​

1. 什么是视图?视图与基本表有什么区别?​

答:视图是从一个或多个表(或视图)中导出来的数据库对象,视图可以像表一样使用。但数据库中仅存储视图的定义,不存储视图的数据,视图是基于基础表导出的虚表。视图定义后,可以像操作基本表一样进行查询、添加、修改和删除操作。

视图的数据随着基本表的变化而变化,视图就像一个窗口,用户只需要关心视图窗口提供的数据即可。视图是虚表,存储的内容是SQL语句,其关联的数据在视图被使用时动态生成。

2. 视图有哪些优点和作用?​

答:视图具有三个主要优点和作用:

  • 简单性:视图可以将多个表的数据集中在一起,简化了用户对数据的查询和处理,同时也屏蔽了数据库中表与表之间的复杂性
  • 安全性:通过视图可以更方便地进行权限控制,能够设置用户只能查询和修改部分信息,视图权限设置与其关联的基本表的权限设置互不影响
  • 逻辑数据独立性:视图可以屏蔽基本表的表结构变化带来的影响。若应用程序使用视图,当基本表的表结构发生更改时,只需要修改视图对应的SQL语句即可,无须修改应用程序

3. CREATE VIEW语句的语法格式是什么?​

答:CREATE VIEW语句的语法格式:

CREATE VIEW 视图名[(列1[, 列2, ..., 列n])]
AS
SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];

参数说明:

  • 视图名应符合标识符的命名规则,不能与表同名,建议以"view_"开头
  • (列1, 列2, ..., 列n)用于指定视图中各列的名称,与SELECT语句结果集的列一一对应。若省略列名列表,将直接使用SELECT语句中的列名称
  • SELECT语句用于定义视图,可以使用多个表或其他视图
  • [WITH [CASCADED|LOCAL] CHECK OPTION]为可选参数,表示要保证在该视图的权限范围之内更新视图

4. WITH CHECK OPTION的作用是什么?CASCADED和LOCAL有什么区别?​

答:WITH CHECK OPTION用于保证在视图的权限范围之内更新视图,即通过视图插入或修改的数据必须满足视图定义中的查询条件。

  • CASCADED(默认值):表示更新视图时要满足所有相关视图和表的条件(级联检查所有依赖视图的条件)
  • LOCAL:表示更新视图时要满足该视图本身定义的条件(只检查当前视图的条件)

5. 如何在Navicat中创建视图?​

答:在Navicat中创建视图的步骤:

  1. 在对象资源浏览器中选中"视图"节点
  2. 单击"新建视图"按钮,打开"视图创建工具"窗口
  3. 在图形界面中添加相应的表
  4. 选择需要的字段
  5. 设置筛选条件和排序等
  6. 保存视图

6. 如何创建基于单表的视图?​

答:使用CREATE VIEW语句,SELECT子句从单个表中查询数据。例如:

CREATE VIEW view_teacher(工号, 姓名, 年龄) AS
SELECT TeaID, Tname, Age FROM teacher;

创建名为view_teacher的视图,显示教师的工号、姓名和年龄信息。视图列名通过括号指定,与SELECT结果集一一对应。

7. 如何创建基于多表的视图?​

答:视图可以基于多个表的连接查询来创建。例如:

CREATE VIEW view_xscj(学号, 姓名, 课程号, 分数) AS
SELECT SCORE.Stuid, Stuname, Cno, Grade
FROM SCORE JOIN student ON SCORE.Stuid = student.Stuid
ORDER BY SCORE.Stuid;

创建学生成绩视图,数据来源于SCORE表和student表的连接查询。视图除了可以从基本表查询生成,还可以从已创建好的视图中查询生成。

8. 查看视图有哪几种方式?​

答:视图创建完成后,可以通过三类语句查看视图的不同信息:

  • SHOW TABLE STATUS LIKE '视图名';:查看视图的基本信息
  • DESCRIBE 视图名; 或 DESC 视图名;:查看视图的结构信息(字段名、类型、是否为空等)
  • SHOW CREATE VIEW 视图名;:查看视图的定义文本(即创建视图的SQL语句)

9. SHOW TABLE STATUS语句查看视图信息的作用是什么?​

答:SHOW TABLE STATUS LIKE '视图名'; 用于查看视图的基本信息,包括视图的名称、引擎、版本、行格式、创建时间、更新时间、检查时间、字符集等信息。通过该语句可以区分视图和基本表(视图的Engine和Comment字段会显示"VIEW")。

10. DESCRIBE语句查看视图结构的作用是什么?​

答:DESCRIBE 视图名; 或 DESC 视图名; 用于查看视图的结构信息,显示视图各字段的名称(Field)、类型(Type)、是否允许NULL(Null)、是否为主键(Key)、默认值(Default)和额外信息(Extra),与查看基本表结构的输出格式相同。

11. SHOW CREATE VIEW语句的作用是什么?​

答:SHOW CREATE VIEW 视图名; 用于查看视图的定义文本,即创建该视图时使用的完整CREATE VIEW语句。通过该语句可以了解视图的完整定义,包括SELECT查询语句、WITH CHECK OPTION等参数。这也是验证视图是否被删除的一种方法——如果视图不存在,执行该语句会报错。

12. 视图命名有什么规则和建议?​

答:视图命名的规则和建议:

  • 视图名应符合MySQL标识符的命名规则
  • 视图名不能与同一数据库中的表同名
  • 视图名在同一个数据库中必须唯一
  • 建议视图名以"view_"或"v_"开头,以便与基本表区分

13. 视图可以基于其他视图创建吗?​

答:可以。视图定义中的SELECT语句可以使用其他视图作为数据来源。即可以从已经创建好的视图中进行查询来生成新的视图。这种嵌套视图的方式在复杂查询场景中很有用,但要注意视图层次不宜过多,以免影响查询性能和维护难度。