MySQL视图

时间:2019-11-20 08:52:13  来源:igfitidea点击:

简介:在本教程中,您将学习MySQL视图以及如何有效地操作视图。

MySQL视图简介

让我们从示例数据库中查看下表中的客户和付款。

此查询使用内部联接从表客户和付款中返回数据:

SELECT 
    customerName, 
    checkNumber, 
    paymentDate, 
    amount
FROM
    customers
INNER JOIN
    payments USING (customerNumber);

这是输出:

下次,如果要获取相同的信息,包括客户名称,支票号码,付款日期和金额,则需要再次发出相同的查询。

一种方法是将查询保存到.txt或.sql文件中,以便以后可以从MySQL Workbench或任何其他MySQL客户端工具打开并执行查询。

更好的方法是将查询保存在数据库服务器中并为其分配名称。
该命名查询称为数据库视图,或简称为视图。

根据定义,视图是存储在数据库目录中的命名查询。

要创建新视图,请使用CREATE VIEW语句。
该语句根据上面的上述查询创建一个视图customerPayments:

CREATE VIEW customerPayments
AS 
SELECT 
    customerName, 
    checkNumber, 
    paymentDate, 
    amount
FROM
    customers
INNER JOIN
    payments USING (customerNumber);

一旦执行了CREATE VIEW语句,MySQL将创建视图并将其存储在数据库中。

现在,您可以在SQL语句中将视图引用为表格。
例如,您可以使用SELECT语句从customerPayments视图中查询数据:

SELECT * FROM customerPayments;

如您所见,语法非常简单。

请注意,视图并不实际存储数据。
当您针对视图发出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';

您可以从daysofweek视图中查询数据,如下所示:

SELECT * FROM daysofweek;

此图显示输出:

MySQL视图的优点

MySQL视图带来以下优点。

1)简化复杂的查询

视图有助于简化复杂的查询。
如果您有任何经常使用的复杂查询,则可以基于该查询创建一个视图,以便可以通过使用简单的SELECT语句来引用该视图,而不必再次键入查询。

2)使业务逻辑一致

假设您必须在每个查询中重复编写相同的公式。
或者您有一个具有复杂业务逻辑的查询。
为了使此逻辑在查询中保持一致,可以使用视图来存储计算并隐藏复杂性。

3)添加额外的安全层

一个表可能会暴露很多数据,包括敏感数据,例如个人和银行信息。

通过使用视图和特权,您可以通过仅向用户公开必要的数据来限制用户可以访问的数据。

例如,表中的员工可能包含SSN和地址信息,这些信息只能由HR部门访问。

要将常规信息(例如名字,姓氏和性别)提供给General Administration(GA)部门,您可以基于这些列创建视图,并向该GA部门的用户授予该视图的权限,而不是向整个表employee授予权限。

4)启用向后兼容

在旧系统中,视图可以实现向后兼容。

假设您想将一个大表标准化为许多较小的表。
而且您不想影响引用该表的当前应用程序。

在这种情况下,您可以基于新表创建一个名称与该表相同的视图,以便所有应用程序都可以像引用表一样引用该视图。

请注意,视图和表不能具有相同的名称,因此在创建名称与已删除表相同的视图之前,需要先删除该表。

在MySQL中管理视图

  • 创建视图–向您展示如何使用CREATE VIEW语句在数据库中创建新视图。

  • 了解视图处理算法–了解MySQL如何处理视图。

  • 创建可更新视图–了解如何创建可更新视图。

  • 使用WITH CHECK OPTION创建视图–使用WITH CHECK OPTION子句确保视图的一致性。

  • LOCAL&CASCADED和WITH CHECK OPTION –使用LOCAL和CASCADED选项指定检查范围。

  • 删除视图–指导您如何删除一个或多个现有视图。

  • 显示视图–提供在数据库中查找视图的方法。

  • 重命名视图–将视图名称更改为另一个。