概述
MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且是在使用视图时动态生成的。
数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。
使用视图查询数据时,数据库会从真实表中取出对应的数据。视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。
视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。
MySQL 的视图不支持输入参数的功能,因此交互性上还有欠缺。但对于变化不是很大的操作,使用视图可以很大程度上简化用户的操作。
如果经常需要从多个表查询指定字段的数据,可以在这些表上建立一个视图,通过这个视图显示这些字段的数据
视图与数据表的区别
视图不同于数据表
-
视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
-
存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
-
视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
-
视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
-
视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
-
视图的建立和删除只影响视图本身,不影响对应的基本表。
视图的优点
视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行查询、修改、更新和删除等操作。同时,视图具有如下优点:
-
定制用户数据:
聚焦特定的数据在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。
-
简化数据操作:
在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。
-
提高数据的安全性:
视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。
-
共享所需数据:
通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
-
更改数据格式:
使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
-
重用 SQL 语句:
视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
在 MySQL 中操作视图
CREATE VIEW 创建视图
通过 CREATE VIEW 语句在数据库中创建视图:
CREATE [OR REPLACE] VIEW [db_name.] view_name [column_list]
AS
SELECT column_lists
FROM table_name
[WHERE condition];
view_name在数据库中必须是唯一的,不能与其他表或视图同名。- 使用
OR REPLACE选项替换已存在的视图 [column_list]也可以显式指定视图的列列表- 如果从视图中选择具有自己的
ORDER BY子句的查询,则忽略它。
基于另一个视图创建视图
视图可以基于现有的视图创建,这样可以进一步抽象查询逻辑或添加额外的过滤条件。
"""也可以基于另一个视图创建视图"""
CREATE VIEW view_name [column_list]
AS
SELECT column_list
FROM another_view
[...];
假设已经有了一个视图 view_sales_summary,它显示了销售数据的汇总信息,现在想创建一个新的视图 view_top_customers,该视图基于 view_sales_summary 并且只显示销售额最高的前10位客户。
CREATE VIEW view_top_customers
AS
SELECT *
FROM view_sales_summary
ORDER BY total_sales DESC
LIMIT

最低0.47元/天 解锁文章
2548

被折叠的 条评论
为什么被折叠?



