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

什么是视图 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 的工作台并展开数据库资源管理器中的视图节点,我们得到以下结果。
请注意,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 视图只会删除已存储的查询;底层表及其数据不会受到影响。

