MySQL 视图:如何通过示例从表创建视图

什么是视图 MySQL?

景观 是虚拟表,不存储任何自己的数据,但显示存储在其他表中的数据。换句话说,视图只不过是 SQL 查询。视图可以包含表中的所有行或几行。 MySQL 视图可以显示一个或多个表的数据。

MySQL 视图语法

现在让我们看一下在 MySQL.

CREATE VIEW `view_name` AS SELECT statement;

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

如何在 MySQL

以下是创建视图的分步过程 MySQL:

步骤1) 使用“myflixdb”创建我们的第一个视图

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

假设授权要求规定会计部门只能从会员表中查看会员编号、姓名和性别。为此,您可以创建一个视图 –

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

步骤2) 展开视图节点

在以下位置执行上述脚本 MySQL 针对 myflixdb 的工作台并展开数据库资源管理器中的视图节点,我们得到以下结果。

在以下位置创建视图 MySQL

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

步骤3) 执行 SELECT 语句

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

SELECT * FROM `accounts_v_members`;

步骤4) 执行脚本

在以下位置执行上述脚本 MySQL 针对 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 从三 (3) 个表(即会员、电影和电影租赁)中获取信息。以下是帮助我们实现此目的的脚本。

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 工作台 针对 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 知识,创建将使用数据库来满足数据需求的应用程序。建议您在应用程序中使用原始表结构的视图,而不是使用表本身。这可确保当您重构数据库时,您的遗留代码将通过视图看到原始架构,而不会破坏应用程序。
  • VIEWS 提高了可重用性。您不必重复创建涉及连接的复杂查询。所有复杂性都转换为使用 VIEWS 的一行查询。这种精简的代码将更容易集成到您的应用程序中。这将消除拼写错误的机会,并且您的代码将更具可读性。
  • 视图有助于数据安全。您可以使用视图仅向用户显示授权信息并隐藏信用卡号等敏感数据。

总结

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