Mysql碎片整理:视图的学习

141 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

  1. 它可以复用SQL语句;简化SQL语句缩写;对于复杂查询有帮助~省去细节。

  2. 尽量不要在视图上做修改

创建语法

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 = '男';

使用

简单查询

SELECT * FROM male_student_view;

该语句结果和下面sql语句是一样的。

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 = '男';

将它当做真实的表操作即可

  1. 创建视图的其实是对AS后面的SQL语句起别名,视图本身并不会将SQL的结果集维护在硬盘或者内存里!在对视图进行查询时,MySQL服务器将会帮助我们把对视图的查询语句转换为对底层表的查询语句然后再执行。
  2. 视图还可以真实表一起使用。
  3. 你对视图的修改操作会影响到真实表中的数据这是有前提的

前提 这个视图的产生不能包括:

  • 聚集函数(比如SUM(), MIN(), MAX(), COUNT()等等)
  • DISTINCT
  • GROUP BY
  • HAVING
  • UNION 或者 UNION ALL
  • 某些子查询
  • 某些连接查询

有很多前提啊,所以对表的修改还是针对基础表进行修改吧,只对复杂查询可以借助视图。

定义列名

CREATE VIEW student_info_view(no, n, m) AS SELECT number, name, major FROM student_info;
  • no 对应 number
  • n 对应 name
  • m 对应 major

之后对视图的操作也需要按照自定义的列名来操作,操作的内容也会影响到真实数据。

查看视图

创建视图时默认是将其放在当前数据库下

  1. use 数据库;
  2. show tables;

删除视图

DROP VIEW 视图名