任务三 创建与查看视图
知识点
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中创建视图的步骤:
- 在对象资源浏览器中选中"视图"节点
- 单击"新建视图"按钮,打开"视图创建工具"窗口
- 在图形界面中添加相应的表
- 选择需要的字段
- 设置筛选条件和排序等
- 保存视图
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语句可以使用其他视图作为数据来源。即可以从已经创建好的视图中进行查询来生成新的视图。这种嵌套视图的方式在复杂查询场景中很有用,但要注意视图层次不宜过多,以免影响查询性能和维护难度。