暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] 如何在 MySQL 中创建视图

原创 DbForge Team 2021-09-02
607

本文将向您展示如何在 MySQL 中创建和管理视图。视图是一个虚拟表,它不存储自己的数据,而是显示存储在其他表中的数据。本质上,视图是 SQL 查询执行的结果,它从一个或多个表中返回所需的数据行。

目录导读

如何使用 CREATE VIEW 语句创建一个简单的 MySQL 视图

在 MySQL 中创建视图的基本语法如下:

CREATE VIEW [db_name.]view_name [(column_list)] AS select-statement;
  • [db_name.]是将在其中创建视图的数据库的名称;如果未指定,将在当前数据库中创建视图
  • view_name是您正在创建的视图的唯一名称
  • [(co​​lumn_list)]定义了可在视图名称后的括号中指示的所需列列表;默认情况下,从 SELECT 语句的选择列表中检索列列表
  • select-statement是指定的 SELECT 语句,可以从表或视图中查询数据

这是最简单的例子。如果我们当前的数据库中有一个名为customers的表,并且我们想请求一个包含订单交易日期的客户列表,脚本可能如下所示:

CREATE VIEW transactions AS SELECT id_number,, name,, transaction_date FROM customers;;

执行此语句后,事务对象将在视图中可用。现在我们可以继续执行一个语句来选择这个视图中的所有字段:

SELECT * FROM transactions;* FROM transactions;

输出将构成一个包含三列的表:id_number、name和transaction_date。

如何使用 JOIN 创建视图以组合来自多个表的数据

我们的下一个示例稍微复杂一些,因为它涉及多个表(在我们的示例中将有三个):

CREATE VIEW order_incomes AS SELECT order_id,, customer_name,, SUM(ordered_quantity * product_price) total(ordered_quantity * product_price) total FROM order_details INNER JOIN orders USING (order_id)(order_id) INNER JOIN customers USING (customer_name)(customer_name) GROUP BY order_id;;

此视图为我们提供了每个客户的订单收入信息,按订单 ID 分组。为此,我们使用order_details表数据计算总收入,并使用 INNER JOIN 子句从订单表中检索订单 ID,从客户表中检索客户名称。

如何更新 MySQL 视图

如果需要通过视图更新表,可以使用INSERT、UPDATE、DELETE语句对底层表的行进行相应的操作。但是,请注意,为了可更新,您的视图不得包含以下任何内容:

  • 聚合函数,例如 MIN、MAX、COUNT、AVG 或 SUM
  • 诸如 GROUP BY、DISTINCT、HAVING、UNION 或 UNION ALL 之类的子句
  • 左联接或外联接
  • 对基表任意列的多次引用
  • SELECT 或 WHERE 子句中的子查询引用出现在 FROM 子句中的表
  • FROM 子句中对不可更新视图的引用
  • 对非文字值的引用

现在让我们基于仓库表创建一个名为仓库详细信息的可更新视图。

CREATE VIEW warehouse_details AS SELECT warehouse_id, phone, city, phone, city FROM warehouses;;

现在我们可以从这个视图查询数据:

SELECT * FROM warehouse_details;* FROM warehouse_details;

假设我们要使用以下 UPDATE 语句通过仓库详细信息视图更改仓库ID 为“55”的仓库的电话号码。

UPDATE warehouse_details SET phone = '(555) 555-1234'= '(555) 555-1234' WHERE warehouse_id = 55;= 55;

最后,我们可以使用以下查询检查是否已应用更改:

SELECT * FROM warehouse_details* FROM warehouse_details WHERE warehouse_id = 55;= 55;

如何删除 MySQL 视图

如果我们不再需要某个视图,我们可以使用简单的 DROP 语句将其删除:

DROP VIEW warehouse_details;;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论