MySQL 视图:如何使用示例从表中创建视图

MySQL 中的视图是什么?

视图是虚拟表,它们本身不存储任何数据,但显示其他表中存储的数据。换句话说,视图就是 SQL 查询。视图可以包含表中的所有行或部分行。MySQL 视图可以显示来自一个表或多个表的数据。

MySQL 视图语法

现在,我们来看看在 MySQL 中创建视图的基本语法。

CREATE VIEW `view_name` AS SELECT statement;

WHERE

  • “CREATE VIEW `view_name`” 告诉 MySQL 服务器在名为 `view_name` 的数据库中创建一个视图对象。
  • “AS SELECT statement” 是打包在 MySQL 视图中的 SQL 语句。它可以是包含来自一个表或多个表数据的 SELECT 语句。

如何在 MySQL 中创建视图

以下是在 MySQL 中创建视图的步骤:

第一步:使用“myflixdb”创建我们的第一个视图。

现在,我们将使用“myflixdb”创建我们的第一个视图。我们将创建一个简单的视图,限制成员表中可见的列。

假设授权要求规定,财务部门只能从成员表中查看成员编号、姓名和性别。要实现这一点,您可以创建一个视图:

CREATE VIEW `accounts_v_members` AS SELECT `membership_number`,`full_names`,`gender` FROM `members`;

第二步:展开视图节点。

在 MySQL workbench 中针对 myflixdb 执行上述脚本,并在数据库浏览器中展开视图节点,会得到以下结果。

Create Views in MySQL

请注意,accounts_v_members 对象现在在数据库视图对象中可见。

第三步:执行 SELECT 语句。

现在,让我们执行一个 SELECT 语句,该语句选择视图中的所有字段,如下面的 MySQL 创建视图示例所示。

SELECT * FROM `accounts_v_members`;

第四步:执行脚本。

在 MySQL workbench 中针对 myflixdb 执行上述脚本,会得到如下所示的结果。

membership_number full_names gender
1 Janet Jones Female
2 Janet Smith Jones Female
3 Robert Phil Male
4 Gloria Williams Female
5 Leonard Hofstadter Male
6 Sheldon Cooper Male
7 Rajesh Koothrappali Male
8 Leslie Winkle Male
9 Howard Wolowitz Male

只返回了财务部门授权的列。成员表中存在的其他详细信息已被隐藏。

如果我们想查看构成特定视图的 SQL 语句,可以使用下面的脚本来实现:

SHOW CREATE VIEW `accounts_v_members`;

执行上述脚本将为您提供视图名称以及用于创建该视图的 SQL SELECT 语句。

MySQL 中的 JOIN 和视图

现在,让我们来看一个涉及多个表并使用 JOIN 的相当复杂的示例。

我们将打包 JOIN,该 JOIN 获取来自三个表(成员、电影和电影租赁)的信息。下面是帮助我们实现这一目标的脚本。

CREATE VIEW `general_v_movie_rentals` AS SELECT mb.`membership_number`,mb.`full_names`,mo.`title`,mr.`transaction_date`,mr.`return_date` FROM `movierentals` AS mr INNER JOIN `members` AS mb ON mr.`membership_number` = mb.`membership_number` INNER JOIN `movies` AS mo ON mr.`movie_id` = mo.`movie_id`;

执行上述脚本将在我们的 myflixdb 中创建名为 general_v_movie_rentals 的视图。

现在,让我们选择名为 general_v_movie_rentals 的表中的所有字段。

SELECT * FROM `general_v_movie_rentals`;

MySQL workbench 中针对 myflixdb 执行上述脚本,会得到如下所示的结果。

membership_number full_names title transaction_date return_date
1 Janet Jones Pirates of the Caribean 4 20-06-2012 28-06-2012
1 Janet Jones Forgetting Sarah Marshal 22-06-2012 25-06-2012
3 Robert Phil Forgetting Sarah Marshal 22-06-2012 25-06-2012
2 Janet Smith Jones Forgetting Sarah Marshal 21-06-2012 24-06-2012
3 Robert Phil X-Men 23-06-2012 28-06-2012

请注意,我们不必编写复杂的 JOIN 查询来获取有关成员、电影和电影租赁详细信息的信息。我们只需将视图用于常规的 SELECT 语句,就像对待任何其他普通表一样。该视图可以从运行在 myflixdb 之上的应用程序的任何地方调用。

删除 MySQL 中的视图

DROP 命令可用于从不再需要的 数据库中删除视图。删除视图的基本语法如下。

DROP VIEW ` general_v_movie_rentals `;

为什么要使用视图?

您主要可能出于以下 3 个原因使用视图:

  • 最终,您将使用您的 SQL 知识来创建应用程序,这些应用程序将使用数据库来满足数据需求。建议您在应用程序中使用原始表结构的视图,而不是直接使用表本身。这可以确保在重构数据库时,您的旧代码将通过视图看到原始模式,而不会破坏应用程序。
  • 视图提高了可重用性。您不必反复创建涉及 JOIN 的复杂查询。所有复杂性都转换为单行查询使用视图。这种精简的代码将更容易集成到您的应用程序中。这将消除输入错误的可能性,并且您的代码将更具可读性。
  • 视图有助于数据安全。您可以使用视图仅向用户显示授权信息,并隐藏信用卡号等敏感数据。

摘要

  • 视图是虚拟表;它们不包含返回的数据。数据存储在 SELECT 语句引用的表中。
  • 视图通过向授权用户显示预期的数据来提高数据库的安全性。它们隐藏了敏感数据。
  • 视图使生活更轻松,因为您不必一次又一次地编写复杂的查询。
  • 可以使用 INSERT、UPDATE 和 DELETE 操作视图。这些操作将更改视图的底层表。唯一的考虑是视图应包含其引用的表的所有 NOT NULL 列。理想情况下,您不应使用视图进行更新。