目录
1.视图
1.1定义
- 视图是数据库中的一种虚拟表,它由查询语句生成,根据特定的条件从一个或多个基本表中检索数据。视图可以根据需要选择性地显示表的某些列,并且可以根据查询语句的定义对数据进行过滤、排序、聚合等操作。
- 视图并不实际存储数据,而是在访问时动态地从基本表中检索数据。通过创建视图,可以简化复杂的查询操作,并提供更方便、更易读的数据访问方式。视图还可以用于隐藏敏感的数据,保护隐私。
- 视图的定义包括视图名称、所涉及的基本表、查询语句以及可选的列别名等。创建视图的语法和具体操作方式因数据库管理系统而异,但通常包括使用CREATE VIEW语句来定义视图结构,以及使用SELECT语句来指定视图的查询逻辑和筛选条件。
- 通过使用视图,可以将复杂的数据库结构隐藏起来,简化了对数据的访问和操作,使应用程序开发更加灵活和高效。
视图提供了以下几个重要的优点:
简化数据访问:通过使用视图,可以将复杂的查询操作封装成一个简单的接口。应用程序可以直接查询视图来获取数据,而无需编写复杂的查询语句。
数据安全性和访问控制:视图可以限制用户对敏感数据的访问权限。可以通过授权的方式控制用户对视图的查询和操作权限,保护数据的安全性。
数据抽象和逻辑组织:视图隐藏了底层表的细节,提供了一个抽象的数据层。它可以组合多个表,并对数据进行筛选、排序、聚合等操作,实现数据的逻辑组织和呈现。
性能优化:通过创建合适的视图,可以优化查询性能。视图可以缓存查询结果,减少查询的计算量,并提高查询的执行速度。
数据一致性:当底层表的数据发生变化时,视图的数据会自动更新,以保持与基本表的一致性。这保证了从视图中获取的数据始终是最新的。
需要注意的是,MySQL视图是一种虚拟表,通过查询语句的定义从基本表中获取数据。它提供了简化的数据访问方式、数据安全性和访问控制、数据抽象和逻辑组织等功能。视图可以增强数据库的可管理性和性能,并提供一致的数据视图。视图并不是独立的实体,它依赖于底层表的存在和数据的一致性。当底层表的数据发生变化时,视图的数据也会相应地改变。
1.2视图与数据表的区别
MySQL视图与数据表在以下几个方面有区别:
存储方式:数据表是实际存储数据的物理表,而视图是虚拟的表,不存储实际的数据。视图通过查询基本表的数据产生结果集,该结果集在查询时被计算和生成。
数据更新:数据表允许直接进行插入、更新和删除等数据操作,而大部分视图是只读的,不允许直接修改基本表的数据。只有特定类型的视图(可更新视图)可以进行一定程度的数据修改操作。
数据结构:数据表具有自己的数据结构,定义了列名、数据类型、约束等,每个表都有自己的物理存储空间。而视图只是一个查询定义,它的数据结构基于查询语句中选择的列和连接的表的结构。
存储空间:数据表存储实际的数据,占用存储空间。视图不实际存储数据,仅存储查询定义,所以不占用独立存储空间,其结果集在查询时动态生成。
索引和约束:数据表可以为列创建索引来提高查询性能,并可以定义各种约束来保证数据的完整性和一致性。视图不能直接创建索引和约束,它依赖于基本表的索引和约束。
数据访问权限:数据表和视图都可以设置不同的访问权限,以控制用户对数据的访问。但视图可以更细粒度地控制对数据的访问,通过设置基本表和视图的权限,可以实现更加灵活的数据安全管理。
需要注意的是,虽然视图和数据表有一些区别,但从应用程序的角度来看,它们可以被当作表来使用。应用程序可以对视图执行查询、过滤、排序等操作,就像对数据表一样。这样可以简化复杂的查询操作,并提供更直观的数据访问方式。
1.3使用视图的好处
1.定制用户数据,聚焦特定的数据
在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。
2.简化数据操作
在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。
3. 提高数据的安全性
视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。
4. 共享所需数据
通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
5. 更改数据格式
通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
6.重用 SQL 语句
视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
1.4特点
MySQL的视图(View)具有以下优点和特点:
1. 简化复杂的查询:视图可以将复杂的查询操作封装成一个简单的查询,提供更好的可读性和易用性。通过事先定义视图的查询语句,用户可以直接查询视图,而无需编写复杂的SQL语句。
2. 数据安全性和权限控制:通过视图,可以隐藏底层表格的结构和细节,只向用户公开需要的数据。可以根据需要,对视图进行权限控制,限制用户对数据的访问和操作,实现数据的安全性和权限控制。
3. 逻辑分离和模块化:通过将数据的逻辑分离成不同的视图,可以提高数据库的模块化和可维护性。将数据的不同方面和关联关系划分到不同的视图中,使得数据库结构更加清晰和易于维护。
4. 提高性能和灵活性:通过视图,可以缓存查询结果,减少重复查询的开销,提高数据库的性能。视图可以根据需要在不同查询中灵活嵌套使用,简化复杂的查询操作,提高查询的效率。
5. 实时计算和动态更新:视图的数据并不实际存储,而是根据定义的查询语句实时计算和生成的。这意味着视图的数据会随着底层表格数据的变化而动态更新,保持数据的实时性。
6. 数据抽象和封装:通过视图,可以将数据的具体结构和实现细节抽象隐藏,向用户提供统一和抽象的数据接口。这样,用户只需关注视图所提供的数据,而无需了解底层表格的具体细节。
7. 简化应用程序开发:视图可以被应用程序直接调用,简化应用程序开发过程。应用程序开发人员可以通过视图获得特定的数据视图,而无需关心复杂的查询逻辑和底层数据表的结构。
总结而言,MySQL的视图具有简化复杂查询、提供数据安全性和权限控制、逻辑分离和模块化、提高性能和灵活性、实时计算和动态更新、数据抽象和封装以及简化应用程序开发的优点和特点。视图是提供数据的逻辑表示,可以大大简化数据查询和操作,并提供更好的数据安全性和权限控制。
1.5语法
1.5.1创建视图
在 MySQL 中,创建视图使用的语法如下:
CREATE VIEW view_name [(column1, column2, ...)] AS SELECT column1, column2, ... FROM table_name WHERE condition;
解释一下各个部分:
CREATE VIEW view_name
:指定要创建的视图的名称。[(column1, column2, ...)]
:可选的,指定视图的列名。如果不指定列名,将默认使用查询结果的列名。AS
:表示接下来的语句是视图的定义。- <
SELECT column1, column2, ...
:指定视图要显示的列名。可以是来自一个或多个表的列,也可以是常量或表达式。