Navicat 博客

2019 年 4 月 16 日,由 Robert Gravelle 撰写

数据库视图是由 SELECT 查询组成的虚拟或逻辑表。与数据库表非常相似,视图也含有可以查询的行和列。大多数数据库管理系统(包括 MySQL)甚至允许你通过视图更新基础表中的数据,但可能会有警告。在本篇文章中,我们将了解什么是视图以及如何使用 Navicat Premium 作为我们的客户端在 MySQL 8 创建一个视图。

基本语法

在 MySQL 中,使用 CREATE VIEW 语句来创建新视图。这是基本语法:

CREATE
   [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]
VIEW view_name [(column_list)]
AS
select-statement;

现在,我们更详细地研究一下这语法。

视图处理算法

ALGORITHM 属性告诉 MySQL 在创建视图时使用哪种机制。MySQL 提供三种算法:MERGE、TEMPTABLE 和 UNDEFINED:

  • MERGE 算法将输入查询与定义视图的 SELECT 语句组合成单个查询。MySQL 然后运行组合查询以返回合并的结果集。MERGE 算法不能应用于包含聚合函数(MIN、MAX、SUM、COUNT、AVG)或 DISTINCT、GROUP BY、HAVING、LIMIT、UNION 和 UNION ALL 等的 SELECT 语句。如果无法应用 MERGE 算法,MySQL 会自动将算法更改为 UNDEFINED。
  • TEMPTABLE 算法首先根据定义视图的 SELECT 语句创建一个临时表,然后针对此临时表运行输入查询。因为 MySQL 必须创建临时表来存储结果集并将数据从基础表移动到临时表,所以 TEMPTABLE 算法的效率比 MERGE 算法低。
  • UNDEFINED 是创建视图时未指定显式算法的默认算法。UNDEFINED 算法使 MySQL 可以选择使用 MERGE 或 TEMPTABLE 算法。MySQL 优先使用 MERGE 算法,因为它的效率更高,但如果无法使用 MERGE 算法,则会使用 TEMPTABLE 算法。

视图名称

你可以为视图选择任何名称,只要遵循与表相同的命名规则即可。此外,视图和表在数据库中共享相同的命名空间,因此你不能将视图名命为与任何现有表或视图相同的名称。

SELECT 语句

在 SELECT 语句中,你可以从数据库中存在的任何表或视图查询数据。但是,SELECT 语句必须遵循几个规则:

  • SELECT 语句可以在 WHERE 子句中包含子查询,但不能在 FROM 子句中。
  • SELECT 语句不能引用任何变量,包括本地变量、用户变量和会话变量。
  • SELECT 语句不能引用预处理语句的参数。

在 Navicat 中创建视图

在 Navicat 中,你可以点击主工具栏上的“视图”按钮,然后点击对象工具栏上的“新建视图”来创建新视图:

在“定义”选项卡编写 SQL。你甚至可以使用“视图创建工具”帮助编写语句!

你可以在“高级”选项卡上找到“算法”设置,以及其他一些选项:

完成后,你可以使用“预览”按钮测试视图,然后点击“保存”进行保存。

总结

视图是以可以查询的格式组合一个或多个表的数据的好方法,但请记住,使用数据库视图亦存在一些缺点。首先,查询数据库视图的数据可能很慢,特别是如果视图是基于其他视图创建的。此外,每当更改视图引用的表的结构时,你都必须记住要同时更改视图。

Navicat 文章
频道条目
分享
文章归档