1.创建视图
语法:CREATE VIEW 视图名 AS 查询语句
如:CREATE VIEW male_student_view AS SELECT s1.number, s1.name, s1.major, s2.subject, s2.score FROM student_info AS s1 INNER JOIN student_score AS s2 WHERE s1.number = s2.number AND s1.sex = '男';
这样此后可以使用male_student_view
代替SELECT
开头的一整个查询语句。
2.使用视图
视图也称为虚拟表,可像表那样对视图进行一些增删改查操作,不过对视图的相关操作会被映射到那个又臭又长的查询语句对应的底层的表上。查询语句的查询列表可被当作视图的虚拟列。
平时怎么从真实表中查询信息,就可怎么从视图中查询信息。
如:SELECT * FROM male_student_view;
如:SELECT subject, AVG(score) FROM male_student_view WHERE score > 60 GROUP BY subject HAVING AVG(score) > 75 LIMIT 1;
值得注意的是,SELECT
中s1.number, s1.name, s1.major, s2.subject, s2.score
这些列对应到male_student_view
虚拟表的列名为number, name, major, subject, score
。
虚拟表值得是,身份上,使用上等价于表。但该表并非存在于磁盘。而是使用时通过查询语句动态生成的。
如:SELECT * FROM male_student_view WHERE number IN (SELECT number FROM student_info WHERE major = '计算机科学与工程');
3.使用视图来创建新视图
如:CREATE VIEW male_student_view2 AS SELECT number, name, score FROM male_student_view;
4.创建视图时指定自定义列名
视图的虚拟列其实是这个视图对应的查询语句的查询列表。可在创建视图时候为它的虚拟列自定义列名,这些自定义列名需用小括号括起来,写到视图名后面,并使用逗号将各个虚拟列的自定义列名分开。需注意,自定义列名一定要与查询列表中的表达式一一对应。
如:CREATE VIEW student_info_view(no, n, m) AS SELECT number, name, major FROM student_info;
有了自定义列名后,之后对视图的查询必须要基于这些自定义列名。
如:SELECT no, n, m FROM student_info_view;
5.查看和删除视图
5.1.查看有哪些视图
可以采用查看表的方式查看视图。
如:SHOW TABLES;
5.2.查看视图的定义
如:SHOW CREATE VIEW 视图名\G
6.可更新的视图
有的视图是可更新,即可在视图上执行INSERT,DELETE,UPDATE
等。对视图执行INSERT,DELETE,UPDATE
的本质,是对该视图对应的底层表中的数据进行增、删、改操作。
比方说,视图student_info_view
的底层表是student_info
,如我们对student_info_view
执行INSERT、DELETE、UPDATE
语句,就相当于对student_info
表执行INSERT、DELETE、UPDATE
语句。
如:UPDATE student_info_view SET n = '狗哥哥' WHERE no = 20210101;
会实际修改student_info
中number
为20210101
行的name
列。
如果一个视图是可更新的,则这个视图中的每一条记录必须与底层表中的每一条记录一一对应,否则该视图是不可更新的。
7.删除视图
语法:DROP VIEW 视图名;
如:DROP VIEW male_student_view2;