MySQL视图有空间吗?
1. 什么是MySQL视图
MySQL视图是由一个或多个 SELECT 语句定义的虚拟表。它是 SELECT 语句的结果集以表格形式进行展示。在创建视图时,将 SELECT 语句定义的列的名称和数据类型结合为新表(视图),它并不真正的存储数据。通俗的说,MySQL视图可以把复杂的 SELECT 语句隐藏并简化,提供易于使用的表结构。
1.1 创建MySQL视图的语句
CREATE VIEW view_name AS SELECT statement;
其中view_name为创建的视图名称,SELECT statement为 SELECT 语句。
2. MySQL视图与空间
MySQL视图确实有空间,它会占用部分内存,但不需要明确的存储空间。
MySQL视图本质上是 SELECT 语句的结果集,它并没有把数据实际存储,而是根据 SELECT 语句的定义,每次需要数据时直接查询底层数据表,并按照 SELECT 语句的列名与数据类型来展现结果集。
虽然MySQL视图并不占用实际的存储空间,但是创建视图的 SELECT 语句需要分配部分内存空间。这部分内存的大小取决于 SELECT 语句的复杂程度和底层数据表的大小。
3. 视图的使用优点
3.1 简化查询语句
MySQL视图对于执行复杂查询语句非常有用。以前,用户需要使用很长的SQL语句来获取复杂的数据,这里介绍一种使用视图的方法来简化查询语句。
首先创建一个存储所有 Sales 表格信息的视图:
CREATE VIEW customer_sales
AS
SELECT orders.salesid, customers.customerid, CONCAT_WS(’ ’,customers.firstname,customers.lastname) AS customername, customers.company, orders.orderdate,orderarticle.articleid,orderarticle.articleprice,orders.totalprice
FROM orders
JOIN customers ON orders.customerid=customers.customerid
JOIN orderarticle ON orders.salesid=orderarticle.salesid;
现在查询一下Sales表格中一段时间内每个客户的收益:
SELECT CONCAT_WS(' ',customers.firstname,customers.lastname) AS customername, customers.company, SUM(totalprice)
FROM customer_sales
WHERE orderdate BETWEEN '2017-01-01' AND '2018-01-01'
GROUP BY customers.customerid;
使用视图customer_sales可以把复杂的 SELECT 语句隐藏并简化查询:
3.2 简化安全管理
另一个优点是,使用视图可以简化安全管理。如果使用视图来访问数据,可以避免用户访问敏感信息。(例如:用户可以访问某个视图而无需直接访问底层数据表。)
4. 总结
MySQL视图和数据表一样,也需要分配部分内存空间来存储 SELECT 语句的结果集。但是视图并不需要额外的物理存储空间,并且可以使用视图来简化复杂的查询语句,以及实现安全访问敏感信息。