mysql数据库中的视图view的概念和详细说明

目录

一、定义

二、视图view的分类

(一)按功能和特性分类

1、普通视图(Regular View/Standard View)

2、索引视图(Indexed View)

3、分割视图(Partitioned View/Distributed Partitioned View)

(二)按其他标准分类

1、只读视图

2、可更新视图

二、视图view的主要优点

(一)简化复杂查询

1、封装查询逻辑

2、提高可维护性

(二)隐藏表结构

1、提高数据安全性

2、定制用户数据

(三)简化权限管理

(四)提高数据独立性

(五)重用查询逻辑

(六)提高查询性能

(七)方便理解和操作

三、创建视图view

(一)基本语法

(二)示例

1、创建视图

2、在navicat中实际操作

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 视图名称 AS
        SELECT 列名称
        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 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值