1. 什么是视图(MySQL 5以及以上版本)
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
举例说明,比如上面检查要看会舞蹈的学生,就可以把学校的所有舞蹈生叫到一起组成舞蹈班,但是检查过后,舞蹈生还是要回原来各自的班级。
应用场景:
- 多个地方用到同样的查询结果。
- 该查询结果使用的SQL语句比较复杂。
1.1 例子1
查询姓张的学生名和专业名
SELECT stuname,majorname FROM stuinfo s
INNER JOIN major m ON s.majorid = m.id WHERE s.stuname LIKE '张%':
// 上面写的如果每次都要查,每次都要写很耗时。 这里通过CREATE VIEW创建一个视图
CREATE VIEW v1 AS select stuname,majorname from stuinfo s inner join major m on
s.majorid = m.id;
// 通过视图查询
select * from v1 where stuname like '张%';
2. 视图的优点
- 重用SQL语句。
- 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必
知道它的基本查询细节。 - 使用表的组成部分而不是整个表。
- 保护数据。可以给用户授予表的特定部分的访问权限而不是整个
表的访问权限。 - 更改数据格式和表示。视图可返回与底层表的表示和格式不同的
数据。
3.视图的规则与限制
下面是关于视图创建和使用的一些最常见的规则和限制。
- 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
- 对于可以创建的视图数目没有限制。
- 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
- ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
- 视图不能索引,也不能有关联的触发器或默认值。
- 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
4.使用视图
在理解什么是视图(以及管理它们的规则及约束)后,我们来看一下视图的创建。
- 视图用
CREATE VIEW
语句来创建。 - 使用
SHOW CREATE VIEW viewname;
来查看创建视图的语句。 - 用DROP删除视图,其语法为
DROP VIEW viewname;。
- 更新视图时,可以先用DROP再用CREATE,也可以直接用
CREATE OR REPLACE VIEW。
如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。
// TODO