MySQL 视图:如何从表格创建视图

⚡ 智能摘要

MySQL 视图是虚拟表,它们本身不存储任何数据,而是呈现已存储的 SELECT 查询的结果。本资源将解释如何创建、查询、连接和删除视图,并提供来自 myflixdb 数据库的可运行示例。

  • 🧱 核心定义: 视图是一种命名的 SELECT 语句,其行为类似于表,但不存储任何数据。
  • 🔐 安全效益: 视图仅显示已授权的列,并对用户隐藏敏感字段。
  • ♻️ 可重复使用性优势: 只需编写一次,即可将复杂的多表 JOIN 操作简化为单行 SELECT 语句。
  • 🛠️ 创建语法: CREATE VIEW `view_name` AS SELECT 语句定义了数据库中的视图。
  • 🗑️ 生命周期命令: SHOW CREATE VIEW 显示已存储的查询,而 DROP VIEW 删除它,但不触及基础表。

MySQL 观看数

什么是视图 MySQL?

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

MySQL 视图语法

现在让我们看一下在 MySQL.

CREATE VIEW `view_name` AS SELECT statement;

NeoCity

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

为什么要使用视图?

在建造景观房之前,了解景观房究竟能给你带来什么好处很有帮助。

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

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

如何在 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 上运行的应用程序系统中的任何位置调用该视图。

Dropping 浏览次数 MySQL

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

DROP VIEW `general_v_movie_rentals`;

Dropping 视图只会删除已存储的查询;底层表及其数据不会受到影响。

常见问题

有时可以。INSERT、UPDATE 和 DELETE 操作仅适用于包含基表所有 NOT NULL 列的简单视图。基于连接或聚合函数构建的视图无法更新。

表在磁盘上实际存储行数据。视图仅存储 SELECT 语句,并在每次查询时重建其行,因此始终反映基表中的最新数据。

不。视图在每次调用时都会执行其底层 SELECT 语句,因此性能与原始查询相同。 MySQL 没有物化视图,速度仍然取决于基表索引。

是的。诸如此类的工具中的人工智能助手。 MySQL 工作台 可以根据描述编写 CREATE VIEW 语句。运行前请验证列列表和连接键。

部分可以。人工智能可以标记敏感列,例如卡号,并提出更安全的列列表。最终决定仍须遵循贵组织的数据访问策略。

总结一下这篇文章: