摘要:在本教程中,您将了解 MySQL 视图以及如何有效地操作视图。
MySQL 视图简介
让我们看看示例数据库中的customers
和payments
的下表。

此查询使用内连接返回来自customers
表和payments
表的数据:
SELECT
customerName,
checkNumber,
paymentDate,
amount
FROM
customers
INNER JOIN
payments USING (customerNumber);
Code language: SQL (Structured Query Language) (sql)
这是输出:

下次,如果您想获得相同的信息,包括客户姓名、支票号码、付款日期和金额,则需要再次发出相同的查询。
一种方法是将查询保存在文件(.txt 或 .sql 文件)中,以便稍后可以从 MySQL Workbench 或任何其他 MySQL 客户端工具打开并执行它。
更好的方法是将查询保存在数据库服务器中并为其指定名称。此命名查询称为数据库视图,或简称为视图。
根据定义,视图是存储在数据库目录中的命名查询。
要创建新视图,请使用CREATE VIEW
语句。此语句根据上面的查询创建一个视图customerPayments
:
CREATE VIEW customerPayments
AS
SELECT
customerName,
checkNumber,
paymentDate,
amount
FROM
customers
INNER JOIN
payments USING (customerNumber);
Code language: SQL (Structured Query Language) (sql)
一旦执行CREATE VIEW
语句,MySQL 就会创建视图并将其存储在数据库中。
现在,您可以在 SQL 语句中将视图作为表引用。例如,您可以使用SELECT
语句从customerPayments
视图查询数据:
SELECT * FROM customerPayments;
Code language: SQL (Structured Query Language) (sql)
正如您所看到的,语法要简单得多。
请注意,视图并不物理存储数据。当您对视图发出SELECT
语句时,MySQL 将执行视图定义中指定的基础查询并返回结果集。因此,有时视图被称为虚拟表。
MySQL 允许您基于从一个或多个表检索数据的SELECT
语句创建视图。下图展示了基于多个表的列的视图:

此外,MySQL甚至允许您创建不引用任何表的视图。但在实践中你很少会发现这种观点。
例如,您可以通过执行以下查询创建一个名为daysofweek
的视图,该视图返回一周中的 7 天:
CREATE VIEW daysofweek (day) AS
SELECT 'Mon'
UNION
SELECT 'Tue'
UNION
SELECT 'Web'
UNION
SELECT 'Thu'
UNION
SELECT 'Fri'
UNION
SELECT 'Sat'
UNION
SELECT 'Sun';
Code language: SQL (Structured Query Language) (sql)
您可以从daysofweek
视图中查询数据,如下所示:
SELECT * FROM daysofweek;
Code language: SQL (Structured Query Language) (sql)
该图显示了输出:

MySQL 视图的优点
MySQL 视图具有以下优点。
1)简化复杂查询
视图有助于简化复杂的查询。如果您有任何经常使用的复杂查询,您可以基于它创建一个视图,以便您可以使用简单的SELECT
语句引用该视图,而不用重新键入查询。
2)使业务逻辑一致
假设您必须在每个查询中重复编写相同的公式。或者您有一个具有复杂业务逻辑的查询。为了使该逻辑在查询之间保持一致,您可以使用视图来存储计算并隐藏复杂性。
3)添加额外的安全层
表可能会暴露大量数据,包括个人和银行信息等敏感数据。
通过使用视图和权限,您可以通过仅向用户公开必要的数据来限制用户可以访问的数据。
例如,表employees
可能包含 SSN 和地址信息,这些信息只能由人力资源部门访问。
要向总务 (GA) 部门公开名字、姓氏和性别等一般信息,您可以根据这些列创建视图,并将 GA 部门的用户(而不是整个表employees
授予该视图。
4) 启用向后兼容性
在遗留系统中,视图可以实现向后兼容性。
假设您想要将一个大表标准化为许多较小的表。并且您不想影响引用该表的当前应用程序。
在这种情况下,您可以根据新表创建一个与表同名的视图,以便所有应用程序都可以像引用表一样引用该视图。
请注意,视图和表不能同名,因此需要先删除表,然后再创建与已删除表同名的视图。
管理 MySQL 中的视图
- 创建视图– 向您展示如何使用
CREATE VIEW
语句在数据库中创建新视图。 - 了解视图处理算法– 了解 MySQL 如何处理视图。
- 创建可更新视图– 了解如何创建可更新视图。
- 使用
WITH CHECK OPTION
创建视图 – 使用WITH CHECK OPTION
子句确保视图的一致性。 -
LOCAL & CASCADED
和WITH CHECK OPTION
– 使用LOCAL
和CASCADED
选项指定检查范围。 - 删除视图- 指导您如何删除一个或多个现有视图。
- 显示视图- 提供在数据库中查找视图的方法。
- 重命名视图- 将视图的名称更改为另一个视图的名称。