前言
本篇,我们将继续学习数据库的理论知识——数据库视图简介及操作。了解视图的定义、作用,以及学习如何对视图进行增删改查等操作。
一、数据库系统的三级模式
- 数据库系统(DBS)的三级模式包括:内模式、模式和外模式。
- 内模式(存储模式):是数据物理模式和存储方式的描述——索引。
- 模式(逻辑模式):数据库中全体数据的逻辑结构和特征的描述——基本表。
- 外模式(用户模式):数据库用户的数据视图,与某一应用有关的数据逻辑表示——视图。
特别注意:一个数据库只有一个内模式、一个模式,但可以有多个外模式。
二、视图定义和作用
1.什么是视图?
- 标准视图是一个虚拟表,其内容由查询定义。
- 数据库中只存放标准视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
- 当基本表的数据发生变化,从标准视图中查询出的数据也就随之变化。
2.视图的作用?
(1)视图能够简化用户的操作。
- 例如,定义了多张表连接的视图就将表与表之间的连接操作对用户隐藏起来。
- 用户所做的只是对一个虚表的简单查询,而虚表如何得来,用户无需了解。
(2)视图使用户能以多种角度看待同一数据。
- 当不同需求的用户共享同一数据库时,这种灵活性非常重要。
(3)视图能够对机密数据提供安全保护。
- 对不同用户定义不同视图,使机密数据不出现在不应看到这些数据的用户视图上。
三、SQL语句操作视图
1.创建视图
【例1】建立学生名“小北”的视图。
CREATE VIEW createView AS SELECT sno,sname,sage,ssex,sdept FROM student WHERE sname='小北';
- DBMS中只存储视图的定义,而不是实际的数据。
- 对视图的查询/修改,都将转换为对基本表的查询/修改。
【例2】建立信息系学生的视图UV_IS_Student。
CREATE VIEW UV_IS_Student AS SELECT sno,sname,sage,ssex FROM student WHERE sdept = '信息系';
- 视图名UV_IS_Student后面缺省字段名,则默认为SELECT子句所指定的字段名。
【例3】创建计算机系学生的平均成绩视图UV_C_AVG,该视图包含两个字段:学号和平均成绩。
CREATE VIEW UV_C_AVG(num,score_avg) AS SELECT sno,avg(grade) FROM UV_Computer GROUP BY sno;
- 视图可以建立在另一个视图之上。
2.查询视图
- 对视图的查询,会被转换成等价的对基本表的查询。这一转换过程被称为
视图消解
。
【例1】根据视图UV_C_AVG,查询计算机系平均成绩在80分以上的学生的学号。
//查询视图与查询基本表语法一致
SELECT num,score_avg FROM UV_C_AVG WHERE score_avg >= 80;
//等价的对基本表的查询为
SELECT s.sno,avg(sc.grade) FROM student s,sc WHERE s.sno = sc.sno
and s.sdept = '计算机系' GROUP BY s.sno HAVING AVG(sc.grade)>=80;
3.更新视图
- 更新视图是指,通过视图来插入、删除、修改数据。
【例1】将信息系学生的视图UV_IS_Student视图中学号为“2002”的学生姓名改为“陈晨”。
//更新命令:
UPDATE UV_IS_Student SET sname='陈晨' WHERE sno='2004';
//转换为基本表中的update语句为:
UPDATE student SET sname='陈晨'WHERE sno='2004' and sdept='信息系';
-
原来的视图
-
更新后的视图
-
原来的基本表
-
更新后的基本表
注意事项: 并非所有的视图都可更新。有些视图的更新不能唯一地、有意义地转换成对基本表的更新。
【例2】删除视图UV_IS_Student中女生的记录。
DELETE FROM UV_IS_Student WHERE ssex = '女';
- 对于依赖于多个基本表的视图(不包括分区视图),不能使用delete语句。
4.修改视图
- 修改视图:ALTER VIEW<视图名> AS <子查询>
【例1】修改UV_IS_Student视图为信息系学生的学号和年龄。
ALTER VIEW UV_IS_Student AS SELECT sno,sage FROM student WHERE Sdept = '信息系';
5.删除视图
- DROP VIEW <视图名>
【例1】删除UV_Computer视图。
DROP VIEW UV_Computer;
总结
以上就是浅显易懂 SQLite3 笔记(07)— 数据库视图简介及操作的所有内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!