目录
一、定义
二、视图view的分类
(一)按功能和特性分类
1、普通视图(Regular View/Standard View)
2、索引视图(Indexed View)
3、分割视图(Partitioned View/Distributed Partitioned View)
(二)按其他标准分类
1、只读视图
2、可更新视图
二、视图view的主要优点
(一)简化复杂查询
1、封装查询逻辑
2、提高可维护性
(二)隐藏表结构
1、提高数据安全性
2、定制用户数据
(三)简化权限管理
(四)提高数据独立性
(五)重用查询逻辑
(六)提高查询性能
(七)方便理解和操作
三、创建视图view
(一)基本语法
(二)示例
1、创建视图
3、查询视图语句
4、查询视图结果
五、更新视图view
六、删除视图view
一、定义
MySQL中的视图(View)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含行和列,但视图不包含在数据库中以存储数据值所占用的物理空间。相反,它包含的是一个SQL语句(称为视图的定义),这个SQL语句从其他表中检索数据,然后可以像表一样进行查询操作。
通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。视图简单理解如下:
通过视图,客户端App不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。
二、视图view的分类
根据不同的分类标准,视图可以分为多种类型。以下是一些常见的分类方式及具体类型:
(一)按功能和特性分类
1、普通视图(Regular View/Standard View)
也称为标准视图,是最常见的视图类型。它由一个或多个SELECT语句定义,仅包含其定义和被引用表的元数据,并不实际存储数据。当查询视图时,数据库系统会根据视图的定义动态地从基础表中检索数据。
2、索引视图(Indexed View)
在普通视图的基础上,为视图建立唯一聚集索引,使得视图中的数据物理存储在数据库中。这样,视图就不再仅仅是SELECT语句和表的元数据,而是像表一样拥有了自己的物理存储。索引视图可以显著提高复杂查询的性能,尤其是在数据仓库和决策支持系统中。然而,索引视图也有一些限制,如只能引用基本表,不能包含子查询或某些聚合函数等。
3、分割视图(Partitioned View/Distributed Partitioned View)
分割视图通常用于在多个数据库或服务器间对数据进行分区。它通过UNION ALL等SQL操作符将多个物理上分布在不同数据库或服务器上的表(称为成员表)连接起来,形成一个逻辑上的完整表。用户可以通过访问这个分割视图来透明地访问所有成员表中的数据,而无需关心数据的物理位置。这种视图在大型分布式系统中特别有用,可以帮助提高数据访问的效率和灵活性。
(二)按其他标准分类
除了上述按功能和特性分类的视图外,还可以根据其他标准对视图进行分类,如:
1、只读视图
只允许用户通过视图查询数据,不允许更新、删除或插入数据。这通常通过设置适当的权限或使用WITH CHECK OPTION等SQL语法来实现。
2、可更新视图
允许用户通过视图更新、删除或插入数据。然而,并非所有视图都是可更新的,这取决于视图的定义以及基础表的关系和约束。
二、视图view的主要优点
视图(View)在数据库管理系统(DBMS)中扮演着重要角色,它并不实际存储数据,而是作为查询结果的逻辑表示。
视图在数据库管理系统中具有多方面的优点,包括简化复杂查询、隐藏表结构、简化权限管理、提高数据独立性、重用查询逻辑以及提高查询性能等。这些优点使得视图成为数据库设计和应用中不可或缺的一部分。
(一)简化复杂查询
可以将复杂的查询保存为视图,以后就可以像查询表一样查询视图,从而简化了SQL语句的编写
1、封装查询逻辑
视图可以将复杂的SQL查询封装起来,使得用户和应用程序能够通过简单的查询语句(如SELECT * FROM view_name)来访问复杂的数据集。这大大降低了直接编写复杂查询语句的难度和出错率。
2、提高可维护性
当底层表的结构发生变化时,只需调整视图的定义,而不需要修改使用这些视图的应用程序或查询语句,从而提高了数据库的可维护性。
(二)隐藏表结构
1、提高数据安全性
视图可以隐藏底层表的具体结构,只向用户暴露需要的数据列和行,从而防止用户直接访问敏感数据或执行未授权的操作。
2、定制用户数据
通过创建不同的视图,可以为不同的用户或角色提供定制化的数据访问权限,实现更细粒度的数据访问控制。
(三)简化权限管理
集中控制,通过授予用户对视图的访问权限,而不是直接对底层表进行权限控制,可以简化用户权限管理的过程。管理员可以更容易地管理和维护用户的访问权限。
(四)提高数据独立性
视图可以帮助隔离数据的物理结构变化对用户的影响。当基础表的结构发生变化时(如增加、删除列或修改列名),只要视图的定义保持不变,那么通过视图查询数据的用户就不会受到影响。
即使需要视图的定义变化,有时候也只要视图的定义相应调整,就可以保持使用视图的应用程序或查询语句的稳定性,从而提高了数据的独立性。
(五)重用查询逻辑
提高开发效率,视图可以将常用的查询逻辑抽象为视图,以便在多个查询中重用。这不仅可以减少重复编写查询语句的工作量,还可以提高代码的可读性和可维护性。
(六)提高查询性能
预编译优化,在某些数据库系统中,视图可以被预编译和优化,以提高查询性能。虽然这并非所有数据库系统的普遍特性,但在支持此功能的系统中,视图的使用可以显著提升查询效率。
(七)方便理解和操作
作为中间层,视图可以作为数据表和用户之间的中间层,简化复杂的查询逻辑和数据关系。对于不熟悉底层表结构的用户来说,视图提供了一个更加直观和易于理解的数据访问接口。
三、创建视图view
(一)基本语法
在MySQL中,可以使用CREATE VIEW语句来创建视图。基本语法如下:
CREATE VIEW 视图名称 ASSELECT 列名称FROM 表名称WHERE 条件;
(二)示例
假设我们有一个employees表,包含id、name、department和salary等列。
1、创建视图
如果我们想创建一个只包含IT部门员工信息的视图,可以这样做:
CREATE VIEW it_department_employees AS
SELECT employee_id, name, salary
FROM employees
WHERE department_id = 4;
2、在navicat中实际操作
由图可以看出,操作返回状态成功。
3、查询视图语句
现在,it_department_employees视图就包含了IT部门所有员工的id、name和salary信息。我们可以像查询表一样查询这个视图:
SELECT * FROM it_department_employees;
4、查询视图结果
查询视图结果如下:
可以看出,非常方便的查到的想要的结果。
五、更新视图view
虽然视图可以像表一样进行查询,但并非所有视图都可以被更新(即插入、更新或删除数据)。如果视图是从单个表派生而来,并且没有使用聚合函数或分组(GROUP BY)等,那么通常可以更新视图。但是,如果视图涉及多个表或使用了聚合函数等,则可能无法直接更新视图。
这里就不再举例说明了,有兴趣的可以再沟通。
六、删除视图view
可以使用DROP VIEW语句来删除视图,例如:
DROP VIEW IF EXISTS it_department_employees;
这条语句会检查it_department_employees视图是否存在,如果存在则删除它。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。