1月阅读周·MySQL数据库入门:视图之在单表上创建视图篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码》。
当前阅读周书籍:《MySQL数据库入门》。
视图概述
视图是从一个或多个表中导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询、修改和删除。与直接操作基本表相比,视图具有以下优点。
1.简化查询语句
视图不仅可以简化用户对数据的理解,也可以简化对数据的操作。日常开发中可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。
2.安全性
通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不到也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。
3.逻辑数据独立性
视图可以帮助用户屏蔽真实表结构变化带来的影响。
综上所述,在操作数据库时,由于视图是在基本表上建立的表,它的结构和数据都来自于基本表,因此,诸如更新数据等操作,都可以在视图上进行。
在单表上创建视图
【例1-1】 在student表上创建view_stu视图。
在创建视图之前需要先创建一个数据库chapter07,创建数据库的SQL语句如下所示:
CREATE DATABASE chapter07;
选择使用数据库chapter07,SQL语句如下:
USE chapter07;
在数据库中创建一个表student用于存储学生信息,创建student表的SQL语句如下所示:
CREATE TABLE student(
s_id INT(3),
name VARCHAR(20),
math FLOAT,
chinese FLOAT
);
使用INSERT语句向student表中插入数据,SQL语句如下所示:
INSERT INTO student(s_id,name,math,chinese) VALUES (1,'Tom',80,78);
INSERT INTO student(s_id,name,math,chinese) VALUES (2,'Jack',70,80);
INSERT INTO student(s_id,name,math,chinese) VALUES (3,'Lucy',97,95);
在上述SQL语句执行成功后,会在student表中添加三条数据。为了验证数据是否添加成功,使用SELECT语句查看student表中的数据,查询结果如下所示:
mysql>SELECT * FROM student;
+------+------+------+---------+
| s_id | name | math | chinese |
+------+------+------+---------+
| 1 | Tom | 80 | 78 |
| 2 | Jack | 70 | 80 |
| 3 | Lucy | 97 | 95 |
+------+------+------+---------+
3 rows in set (0.00 sec)
从查询结果可以看出,student表中成功地添加了三条记录。接下来创建student表的视图,创建语句如下所示:
CREATE VIEW view_stu AS SELECT math,chinese,math+chinese FROM student;
上述SQL语句执行成功后,会生成一个view_stu视图,接下来使用SELECT语句查看view_stu视图,查询结果如下所示:
mysql>SELECT * FROM view_stu;
+------+---------+--------------+
| math | chinese | math+chinese |
+------+---------+--------------+
| 80 | 78 | 158 |
| 70 | 80 | 150 |
| 97 | 95 | 192 |
+------+---------+--------------+
3 rows in set (0.00 sec)
从查询结果可以看出,view_stu视图创建成功,并且重新定义了一个用于计算数学成绩和语文成绩之和的math+chinese字段。在默认情况下,创建的视图字段名称和基本表的字段名称是一样的,但是也可以根据实际的需要指定视图字段的名称。
【例1-2】 在student表上创建一个名为view_stu2的视图,自定义字段名称,SQL语句如下所示:
CREATE VIEW view_stu2(math,chin,sum) AS SELECT math,chinese,math+chinese
FROM student;
上述SQL语句执行成功后,会生成一个名为view_stu2的视图,接下来使用SELECT语句查看view_stu2视图,查询结果如下所示:
mysql>SELECT * FROM view_stu2;
+------+------+------+
| math | chin | sum |
+------+------+------+
| 80 | 78 | 158 |
| 70| 80 | 150|
| 97 | 95 | 192 |
+------+------+------+
3 rows in set (0.00 sec)
从查询结果可以看出,虽然view_stu和view_stu2两个视图中的字段名称不同,但是数据却是相同的。这是因为这两个视图引用的是同一个表中的数据,并且创建视图的“AS SELECT math,chinese,math+chinese”条件语句相同。在实际开发中,用户可以根据自己的需要通过使用视图的方式获取基本表中自己需要的数据,这样既能满足用户的需求,也不需要破坏基本表原来的结构,从而保证了基本表中数据的安全性。
总结
视图具有简化查询语句、安全性和保证逻辑数据独立性等作用,掌握如何管理视图是非常重要的。
在默认情况下,创建的视图字段名称和基本表的字段名称是一样的,但是也可以根据实际的需要指定视图字段的名称。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)