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 的工作台并展开数据库资源管理器中的视图节点,我们得到以下结果。
请注意,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 进行更新。