MySQL视图
简介:在本教程中,您将学习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选项指定检查范围。
删除视图–指导您如何删除一个或多个现有视图。
显示视图–提供在数据库中查找视图的方法。
重命名视图–将视图名称更改为另一个。