MySQL-管理手册-全-
MySQL 管理手册(全)
原文:
zh.annas-archive.org/md5/6ADB6B19A3B2644904B54CF99112FA7C译者:飞龙
前言
Navicat 是一个用于管理 MySQL Server 的 GUI 工具,可以管理可视化工具以及用于手动编写 SQL 和存储过程的智能代码编辑器。虽然它的一些功能相当直观,但其中一些功能需要指导才能发现和学习。
本书从创建基本服务器连接设置,从头开始设计数据库或导入现有数据开始。然后继续使用高级功能,如设计函数和存储过程,创建事件触发器以及创建和调度批处理作业。
章节按照逻辑顺序排列,用户从简单结构开始到复杂设计,并逐渐介绍高级功能。在最后一章结束时,读者应该能够处理数据库管理的各个方面,以及如何掌握智能代码编辑器,以满足开发需求,如函数和存储过程。
对于中级和高级 MySQL 用户和管理员,本书可以作为参考指南使用,章节不需要按任何顺序进行跟进。
本书涵盖内容
第一章,“入门”,介绍了 Navicat 数据库管理工具的 GUI,并描述了如何设置不同类型的连接,从基本设置到高级配置。
第二章,“与数据库一起工作”,讨论了使用数据库对象的基本原理,如表,视图,函数和事件,以及使用 Navicat 的可视化工具设计查询。
第三章,“使用 Navicat 进行数据管理”,带您了解数据管理的过程。涵盖的主题包括以各种格式导入和导出数据,不同数据库之间的直接数据传输,数据和结构同步,备份/恢复操作以及创建和调度批处理作业。
第四章,“使用 Navicat 进行数据建模”,指导您完成可视化数据建模的步骤,以帮助我们学习如何使用 GUI 工具设计数据模型;从可视化编辑器中创建,编辑和操作表结构;将数据模型转发到.sql文件;以及将现有数据库反向引擎到可视化表示中。
第五章,“数据库维护和安全管理”,讨论了使用 Navicat 进行基本 DBA 功能的基本要点,涉及 MySQL 的安全性和维护。它将指导您完成创建和编辑 MySQL 用户,管理访问权限以及执行维护任务,如数据库分析,优化和修复的必要步骤。
第六章,“使用 Navicat 设计报告”,讨论了报告设计,并提供了有关构思,创建和自定义基于您的 MySQL 数据库对象的报告的各种步骤的说明。
附录,“附加提示和技巧”,提供了一些额外的提示和技巧,以充分利用 Navicat,并指导如何将您的设置复制到另一个 Navicat 用户或计算机,监视 MySQL 服务器,干预运行过程,强大的搜索数据库,并发现设计查询的新方法。
您需要为本书做好准备
要运行本书中的示例,需要以下软件:
-
MySQL 服务器(Mac/Win/Linux):
-
MySQL Server 5.1 或更高版本
-
Navicat(Mac/Win/Linux):
-
Navicat Premium 或 Navicat for MySQL 9.0 或更高版本(第四章,“使用 Navicat 进行数据建模”和第五章,“数据库维护和安全管理”需要 Navicat 10 或更高版本)
-
设计报告(第六章,“使用 Navicat 设计报告”)需要 Navicat for Windows
这本书适合谁
这本书特别适合:
-
数据库管理员/DBA(初学者和专家)
-
将 MySQL 用作后端数据库的开发人员(初学者和专家)
-
IT 分析师(初学者和专家)
非 IT 人员,他们只是想从 MySQL 数据库中提取有意义的数据(初学者和专家),以及需要至少对客户端/服务器架构中的数据库有一些基本知识的人会发现这本书很有用。
初学者可以从头开始学习数据库设计和管理(甚至一些开发),特别是由于本书中的教程。
专家可以解开 Navicat 的某些神秘之处,其中包括有用但似乎隐藏或不明显的功能。
约定
在本书中,您会发现一些文本样式,用以区分不同类型的信息。以下是一些这些样式的示例,以及它们含义的解释。
文本中的代码词显示如下:“如果您使用 Mac,Navicat 应该简单地位于您的Applications文件夹中,除非您从安装程序窗口将其拖放到其他位置。”
代码块设置如下:
BEGIN
INSERT INTO emp_log SET emp_id = NEW.id, date_created = NOW();
END
任何命令行输入或输出都写成如下形式:
CREATE TABLE if not exists emp_log (
id int auto_increment primary key,
emp_id int,
date_created datetime
);
新术语和重要单词以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,会以这样的形式出现在文本中:“要在 Windows 7 及更早版本中启动 Navicat,请转到开始菜单 | 所有程序 | PremiumSoft,然后单击您在 PC 上安装的 Navicat 版本。”
注意
警告或重要说明显示在这样的框中。
提示
提示和技巧会以这样的形式出现。
读者反馈
我们的读者反馈总是受欢迎的。让我们知道你对这本书的想法——你喜欢什么或可能不喜欢什么。读者的反馈对我们开发能让你真正受益的书籍非常重要。
要给我们发送一般反馈,只需发送电子邮件至<feedback@packtpub.com>,并在消息主题中提及书名。
如果您在某个主题上有专业知识,并且有兴趣撰写或为书籍做出贡献,请参阅我们的作者指南,网址为www.packtpub.com/authors。
客户支持
既然您是 Packt 书籍的自豪所有者,我们有很多东西可以帮助您充分利用您的购买。
勘误
尽管我们已经尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的书籍中发现错误——也许是文本或代码中的错误——如果您向我们报告这一点,我们将不胜感激。通过这样做,您可以帮助其他读者避免挫折,并帮助我们改进本书的后续版本。如果您发现任何勘误,请访问www.packtpub.com/support,选择您的书,点击勘误提交表链接,并输入您的勘误详情。一旦您的勘误经过验证,您的提交将被接受,并且勘误将被上传到我们的网站,或添加到该标题的现有勘误列表中的勘误部分。
盗版
互联网上侵犯版权材料的盗版问题是所有媒体都面临的持续问题。在 Packt,我们非常重视保护我们的版权和许可。如果您在互联网上发现我们作品的任何非法副本,请立即向我们提供位置地址或网站名称,以便我们采取补救措施。
如果发现盗版材料,请通过<copyright@packtpub.com>与我们联系并提供链接。
我们感谢您帮助保护我们的作者,以及我们为您提供有价值内容的能力。
问题
如果您在书的任何方面遇到问题,可以通过<questions@packtpub.com>与我们联系,我们将尽力解决。
第一章:入门
本章旨在介绍带有图形用户界面(GUI)的 Navicat 数据库管理工具,并描述如何设置不同类型的连接和基本设置到高级配置,例如 SSH,到已安装的 MySQL 服务器。在本章中,您将学习以下内容:
-
Navicat 的不同版本,适合什么人和什么用途
-
建立到 MySQL 服务器的基本连接
-
设置高级连接,例如 SSH 或 HTTP 隧道
进入 Navicat
Navicat不仅是一个功能强大、复杂且易于使用的带有图形用户界面的数据库管理工具,也是开发人员在处理基于数据库的应用程序时非常有用的助手。它适用于 Windows、Mac 和 Linux。
Navicat for MySQL是 Navicat 家族的第一个成员,具有高级功能,允许您在 GUI 中导入/导出数据,备份或将整个数据库转移到另一个服务器,并设计查询,具有点对点和拖放功能。
Navicat Premium是家族的终极成员,是一款全能的数据库管理和迁移工具,结合了所有 Navicat 版本,使用户能够在单个应用程序中同时连接到 MySQL、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库,大大简化了多个品牌数据库的数据库管理。
虽然 MySQL 之外的其他数据库不在本书的范围之内,但您可能想查看 Packt 的其他标题,例如 Oracle 数据库(www.packtpub.com/books/oracle-database)和 Microsoft SQL Server(www.packtpub.com/books/microsoft-sql-server)。
Navicat 不是免费产品,但您可以从创建该产品并将其推向市场的公司 PremiumSoft 的网站上轻松获取 30 天的评估。
在整本书中,示例将使用 Navicat Premium 版本 10.0.9 进行演示,尽管您可以使用 Navicat for MySQL 10.0.9 来跟随每个示例和练习。即使您使用的 Navicat 版本旧至 v.8.0,您也应该能够跟上大多数示例。
要下载 Navicat,您可以转到www.navicat.com/download/download.html并获取 Navicat for MySQL 或 Navicat Premium。在撰写本文时,最新版本是 10.0.9。
建立到数据库的连接
在这一点上,我假设您已经安装、设置和运行了您的 MySQL 服务器以及 Navicat,这样我们就可以立即开始使用 Navicat 了。
要在 Windows 7 及更早版本中启动 Navicat,转到开始菜单 | 所有程序 | PremiumSoft,然后单击您在 PC 上安装的 Navicat 版本。
如果您使用的是 Mac,Navicat 应该简单地位于您的应用程序文件夹中,除非您从安装程序窗口中拖放到其他位置。
要定义一个新连接,转到文件菜单或连接按钮,这是 Navicat 主工具栏(或我们可能称之为功能区)中的第一个图标,并选择文件 | 新连接 | MySQL以打开名为MySQL - 新连接的连接配置窗口,在那里我们可以指定要建立的连接的设置。
您可以参考以下截图:

正如您在截图的第二部分中所看到的,MySQL - 新连接窗口是您可以指定设置以定义连接的地方。它有五个选项卡;第一个选项卡是您设置基本连接属性的地方,在大多数情况下是足够的,如下所示:
-
连接名称:完全由您决定,因此您可以输入任何名称来描述您的连接。
-
主机名/IP 地址:这是非常直观的,您可以输入数据库服务器的域名或其 IP 地址。
-
端口:此字段包括 MySQL 服务器的 TCP/IP 端口号,在大多数情况下是
3306。 -
用户名:此字段包括数据库用户名(我选择
root,这是我新安装的本地服务器的默认管理员用户)。 -
密码:此字段包括上述输入用户名的密码。在新的 MySQL 安装中,
root的密码为空,所以如果这是您第一次连接到刚刚安装的数据库服务器,您可能希望在此时将其留空,因为我将在本章末尾指导您如何修改所有这些设置。
如果您要连接到远程 MySQL 服务器,必须确保为您将要使用的用户名授予了远程访问权限。在某些情况下,MySQL 服务提供商不直接提供远程访问服务器的情况下,通过安全 Shell(SSH)或 HTTP 隧道进行连接可能是一种替代解决方案。我们将在以下各节中分别看到如何设置这些类型的连接。
通过安全外壳(SSH)进行连接
SSH 是一个命令行工具,用于以安全的方式通过网络登录到服务器或另一台计算机上,在远程机器上运行命令或传输数据。为了增强安全性,SSH 提供了强大的身份验证机制,可以使用密码或公钥/私钥对,也简称为公钥。
为了通过 SSH 设置与 MySQL 服务器的连接,首先输入前一节中描述的基本连接设置,然后转到连接设置窗口中的SSH选项卡,单击标记为使用 SSH 隧道的复选框,然后输入以下信息:
-
主机名/IP 地址:此字段包括 SSH 服务器的地址或 IP。
-
端口:此字段包括 SSH 服务器的端口号(默认为
22)。 -
用户名:此字段包括 SSH 服务器的用户,通常是 UNIX 机器的用户,而不是数据库的用户名。
-
认证方法:此字段允许您在密码认证和公钥认证之间进行选择,视情况而定。
-
密码(如果适用):此字段包括 SSH 用户的密码(而不是数据库)。
-
私钥(如果适用):如果选择公钥认证,此字段将出现,您需要通过单击其后面的小矩形按钮指定私钥文件的路径。
-
口令短语(如果适用):在公钥认证的情况下,此字段也会出现,并与私钥一起使用。它基本上就像一个密码,但是适用于您的密钥而不是账户。
通过 HTTP 隧道进行连接
在某些情况下,通过任何协议连接到服务器是不可能的,但 HTTP 却可以,特别是当一方位于防火墙后时。例如,一些公司希望限制其用户的互联网访问,以便他们只能浏览网页,而不能进行其他操作;没有 FTP,没有即时通讯等。这就是 HTTP 隧道的用武之地。它允许您通过端口80(HTTP 默认端口)而不是3306或任何其他端口连接到服务器(在本例中是 MySQL)。
要设置 HTTP 连接,请按照以下步骤进行:
-
将随 Navicat 安装程序一起提供的 HTTP 隧道脚本上传到 MySQL 服务器所在的 Web 服务器上。这个文件叫做
ntunnel_mysql.php。 -
转到 Navicat 的MySQL - 新连接窗口中名为HTTP的选项卡。
-
启用复选框使用 HTTP 隧道。
-
输入您上传隧道脚本的 URL(例如,
www.ozar.net/mysql/ntunnel_mysql.php)。 -
如果您知道上传脚本的 Web 服务器已安装了 ModSecurity,则可以选中使用 base64 对传出查询进行编码选项。
-
如果隧道脚本位于受密码保护的服务器上,或者您的互联网连接经过代理,您可以在身份验证或代理选项卡下提供所需的身份验证详细信息。
注意
请注意,HTTP 隧道选项卡和 SSH 隧道选项卡不能同时使用。您需要选择其中一个。
设置安全套接字层(SSL)
安全套接字层(SSL)是一种安全协议,用于在服务器和其客户端之间建立加密链接,确保两方之间所有数据传输的隐私和完整性。
要在 Navicat 中使用 SSL,您需要拥有 SSL 证书;您可以从www.openssl.org获取一个免费的解决方案,如 OpenSSL,并在本地服务器上安装它,并为 SSL 配置您的 MySQL 服务器,并为其设置服务器端证书。最后,您可以设置客户端证书,然后可以从 SSL 服务器获取。有关如何为 MySQL 安装和设置 OpenSSL 以及 Navicat 证书的完整说明在 Navicat 手册中有详细解释。
高级设置
Navicat 提供了一个选项,用于设置高级数据库属性,您可以通过单击MySQL - 新连接窗口中的高级选项卡来控制。
第一个标记为“设置保存路径”的字段允许您将设置保存在您指定的本地驱动器位置。您可以调整一些其他设置,比如覆盖字符编码,对数据库服务器的 ping 间隔,自动连接,使用套接字文件,即mysql.sock等等。

这里最有用的功能是能够在 Navicat 主窗口的左窗格上隐藏和显示某些数据库,其中列出了所有连接配置文件和属于它们的数据库的树形视图。只要您勾选使用高级连接复选框,此功能就会激活。
名为数据库的列表框变为活动状态,并且列表中的每个项目旁边都有一个略小的复选框。您突出显示复选框的数据库将是下次打开连接时出现的数据库。您还可以为每个数据库单独指定用户名和密码。如果您对给定数据库具有不同权限的多个帐户,则这一点尤其有用。
您还可以使用右侧的按钮添加或删除列表中的项目。
测试和保存您的设置
现在我们已经完成了配置连接,我们只需要测试连接并单击确定。您可以随时通过右键单击左窗格上列出的连接配置文件的名称并选择连接属性...来修改这些设置,以重新打开我们的连接配置窗口。
总结
在本章中,我们通过学习如何在 Navicat 中建立到 MySQL 服务器的连接,为本书的其余部分奠定了基础,从使用简单的习惯参数到安全配置,如 SSH 或 HTTP 隧道,以克服有限的互联网访问情况。
在下一章中,我们将开始处理数据库,并逐步指导您处理数据库对象,如表,视图,函数,过程,并使用 Navicat 的复杂但易于使用和令人上瘾的工具设计查询。乐趣才刚刚开始。
第二章:与数据库一起工作
在上一章中,我们看到了如何从 Navicat 连接到 MySQL 服务器的不同类型的连接。现在我们准备好连接到服务器,是时候开始处理数据库了。在本章中,您将学习如何:
-
从头开始创建数据库
-
使用 Navicat 的可视化设计工具创建表和视图
-
创建外键约束和触发器
-
定义存储过程和函数
-
创建计划事件
-
处理数据库查询
使用 Navicat 管理数据库对象
我们所说的数据库对象是什么意思?基本上,表、视图、函数和事件是我们所说的对象。对于每个对象,在 Navicat 的主窗口中都有一个工具栏图标,它们也出现在导航窗格左侧的树视图列表中。可以通过取消选中工具 | 选项中的在连接树中显示对象选项来隐藏对象层次结构,但这对于新手用户来说可能是微不足道的。
Navicat 主窗口的工具栏上有大按钮和图标,用于处理数据库对象。例如,单击工具栏上的表按钮相当于在导航窗格中的连接下选择表。在工具栏下方的主窗口右侧剩余的较大部分称为对象窗格,用于显示所选类型的对象。以下屏幕截图显示了表的对象:

从头开始创建数据库
Navicat 使得从头开始创建数据库和对象(如表和视图)变得非常容易。由于我们在上一章中已经连接到了 MySQL 服务器,现在是时候开始使用我们自己的空白数据库了。以下步骤描述了如何从头开始创建数据库:
-
双击localhost(或者您命名的服务器)在连接窗格中以连接。
-
然后右键单击服务器名称,并从弹出的上下文菜单中选择新建数据库...。
-
在打开的新较小窗口中,将数据库名称输入为
our_first_db,将字符集指定为utf8--UTF-8 Unicode,将校对指定为utf8_unicode_ci。 -
最后点击确定。
现在our_first_db应该出现在localhost下的其他数据库中。通过右键单击它,您可以查看可以在我们的新空白数据库上执行的操作,例如打开它,查看和编辑其属性,如字符集,校对和删除它。在同一弹出菜单中还有一个名为数据传输...的项目,我认为这是 Navicat 最强大的功能之一。它允许您直接在另一个数据库之间传输数据,我们将在第三章 使用 Navicat 进行数据管理中介绍。
注意
由于 MySQL 5.x 的限制,无法通过 GUI 工具重命名数据库。这样做的最佳方法是将数据库转储到 SQL 文件中,创建一个具有所需名称的新数据库,并执行转储文件以填充其内容。您还可以在第三章 使用 Navicat 进行数据管理中找到此类任务的详细信息。

创建表
现在让我们按照以下步骤为our_first_db创建一些表:
-
通过双击其名称,从导航窗格中选择并打开数据库。
-
然后要么单击工具栏上的新建表按钮,要么右键单击our_first_db下的表。
-
最后,从弹出菜单中选择新建表。
Navicat 的表设计窗口将出现。这里的控件非常直观。我们将为一个简单的员工数据库创建一个部门表,我们需要三个字段:id(int)、name(varchar)和manager_id(int)。要创建这些字段,请按照以下步骤进行:
-
创建第一个名为
id的字段,选择类型为int,将长度列留空,因为它将自动设置为11,取消允许空值,通过单击带有黄色钥匙图标的小按钮或单击允许空值复选框旁边的空单元格,将其设置为主键,最后在底部勾选自动递增选项。 -
添加新字段就像单击工具栏上的添加字段按钮一样简单,或者在最近创建的字段的最后一个单元格中按下Tab键。
-
接下来,我们将创建一个名为
name的字段,选择类型为varchar,长度为31个字符,再次取消允许空值复选框。 -
最后,选择类型为int,将长度列留空,因为它将自动设置为
11,我们还希望为此字段保留允许空值的选中状态。 -
现在,通过单击工具栏上的保存或另存为按钮之一,将此表保存为
department。Navicat 还会在我们试图关闭窗口而没有保存时提示我们保存进度。参考以下截图:![创建表]()
注意
可以通过单击现有字段并单击工具栏上的插入字段按钮在先前创建的字段之间插入新创建的字段。我们还可以通过选择字段并使用工具栏上的上移和下移按钮来更改字段的顺序。
现在,我们将重复之前的步骤来创建员工表,但这次使用以下规格定义字段。在下表中,false 表示取消选中,true 表示选中:
| 名称 | 类型 | 长度 | 小数 | 允许空值 | 主键 |
|---|---|---|---|---|---|
id |
int | false | X (自动递增) | ||
first_name |
varchar | 50 |
true | ||
last_name |
varchar | 40 |
false | ||
email |
varchar | 60 |
true | ||
title |
varchar | 35 |
true | ||
salary |
decimal | 10 |
2 |
true | |
perks |
int | false | |||
department_id |
int | true | |||
manager_id |
int | true |
接下来,我们需要通过定义一些外键约束来在两个表之间建立一些关系。
定义外键
首先,我建议保存表并将其命名为employee(如果您在那之后关闭了表设计师,请右键单击表的名称,然后从弹出菜单中选择设计表)。回到表设计师后,执行以下步骤:
-
切换到外键选项卡。
-
在第一行的第一个字段中输入
fk_employee_4_department作为外键的名称。 -
在第二列中选择字段为department_id。
-
在第三列中选择our_first_db作为参考数据库。
-
在第四列中选择department表作为参考表。
-
选择参考字段为id。
-
根据您的编程策略,您还可以选择级联选项在删除时和在更新时。
例如,在这种情况下选择级联选项在删除时意味着,当删除部门记录时,该部门中的所有员工也将被删除。将在删除时和在更新时留空将默认设置为限制,这意味着您无法删除与之关联员工的部门。
上述定义将强制执行引用完整性检查,以确保每个员工都被分配到现有部门,通过department_id列。这意味着您不能为给定的员工设置不存在的部门 ID。
现在重复之前提到的步骤,为manager_id定义一个外键,命名为fk_employee_4_manager_id,将引用表设置为employee,引用字段设置为id,如下图所示:

如果在保存更改之前切换到SQL 预览选项卡,您将能够看到一些自动生成的 SQL 命令,用于向表中添加设计的外键约束。实际上,您对表设计所做的每一项更改都有相应的 SQL 命令,Navicat 在幕后执行这些命令并在数据库服务器上执行它们。这对于学习 SQL 也很有用,或者在服务器出现错误时,用于分析幕后发生了什么。SQL 预览选项卡的屏幕截图如下:

重复相同的步骤,为department表中的manager_id定义一个外键约束,引用employee 表的id字段,并命名为fk_department_4_manager。
注意
至于表命名约定,我鼓励使用单个名词作为表名,特别是为了让使用对象关系映射(ORM)API 的开发人员更容易,这些 API 具有用于开发基于数据库的应用程序的反向工程工具。
Navicat 的表设计器还具有一个名为索引的选项卡,使得创建索引与使用类似方法创建字段和定义外键一样简单。实际上,创建外键需要相应的索引也要被创建,Navicat 会自动为我们创建每个定义和创建的外键的索引。
您还会注意到触发器选项卡,您可以轻松地为表定义触发器。让我们定义一个简单的触发器,每当向员工表添加新行时都会被激活。在这个例子中,我们将需要一个我称之为emp_log的辅助表。
定义触发器
您可以通过使用表设计器创建emp_log表来练习本节学到的知识,定义三个基本字段:id(类型-int,检查主键自动递增),emp_id(类型-int)和date_created(类型-datetime),或者转到 Navicat 主窗口的菜单栏,选择工具 | 控制台...(或者按F6作为快捷键),并在 MySQL 控制台窗口中输入以下命令:
CREATE TABLE if not exists emp_log (
id int auto_increment primary key,
emp_id int,
date_created datetime
);
创建emp_log表后,我们准备定义一个触发器,用于记录我们在employee表中创建的每个员工记录。右键单击employee表,选择设计表,然后在员工表的表设计器中执行以下步骤:
-
转到触发器选项卡,然后从工具栏中单击添加触发器。
-
将触发器命名为
ins_trig。 -
在触发列中,选择之后。
-
勾选插入,其他复选框保持不变。
-
在定义窗格中输入以下代码:
BEGIN
INSERT INTO emp_log SET emp_id = NEW.id, date_created = NOW();
END
触发器选项卡的屏幕截图如下:

Options选项卡是另一个有用的辅助工具,它允许您修改 MySQL 表的某些设置。MySQL 数据库设计者的一个主要陷阱是,在创建 MySQL 表时,他们可能会意外地得到一个 MyISAM 表,而实际上他们打算使用 InnoDB 引擎。Navicat 使得将引擎更改为 InnoDB 变得容易。不过,这种修改并不是绝对安全的。由于 MySQL 的内部机制,如果表中已经输入了一些数据,这可能会使转换变得困难,有时甚至是不可能的。这里的其他选项包括字符集和校对修改,设置或重置下一条记录的自动增量值,并为所有行维护一个实时校验和——这是 MyISAM 表的一个独有特性。
在这个屏幕上还可以进行更高级的调整,这在 Navicat 的手册中有详细介绍。
注意
只需点击表的名称,然后从弹出菜单中选择Duplicate Table,即可复制表。Navicat 的另一个相关功能是,您可以以相同的方式复制表,并将其粘贴到另一个数据库中。

在表中输入数据
现在我们已经建立了数据库的基础,最好在表中输入一些数据。要打开表进行数据输入,只需双击它。
Navicat 提供了两种在表中输入数据的方法:其中一种是使用Grid View,这是最常见的输入数据的方式,就像在电子表格中一样。
只需点击单元格即可开始输入数据,完成后,可以按Tab键移动到下一个单元格,或者单击活动单元格外的任何位置。具有外键约束的字段将包含一个小方形按钮,用于从下拉列表中选择数据,该列表将显示来自具有引用的表字段的数据项。在我们的情况下,department_id可以从部门表中输入的记录的 ID 中选择,如下面的屏幕截图所示。
编辑行完成后,可以单击窗口底部的小勾选P按钮保存更改,或者单击O按钮放弃更改。如果需要,可以单击(+)加号或减号(-)删除记录,如下面的屏幕截图所示:

如果您之前使用过 Microsoft Access 或 Oracle Forms,表单视图对您来说会很熟悉。在该视图中,每个表行或记录将显示在单独的页面上,字段垂直对齐。请参阅下面的屏幕截图:

创建视图
数据库视图通常用于隐藏某些表的复杂细节,并且在某些情况下,它们仅用作安全机制,通过限制用户被允许检索的数据。在本节中,我将向您展示如何在 Navicat 的视图设计器中创建视图。它具有一个强大的可视化编辑工具称为View Builder,它允许您使用点按和拖放手势直观地设计视图。
要将表添加到视图中,只需在左侧窗格上单击其名称,然后将其拖动到图形视图区域,或者只需在树视图中双击其名称,然后单击View Builder选项卡,然后按照以下步骤操作:
-
当您在图形视图中放置了所有表后,可以单击左侧字段名称旁边的小框,将其包含在视图中。如果单击表名称左侧的框,所有字段将包含在视图的SELECT查询中,如下面的屏幕截图所示:
![创建视图]()
-
要定义关系,请点击表的字段名称,并将其拖动到相关的表的字段上。例如,在这个视图中,我们希望显示每个员工的部门名称,而不是他/她的部门 ID。
-
点击employee表中的department_id字段,将其拖动到department表的id字段上。将会画出一条连接线,表示两个表之间的关系。
与此同时,可视设计的 SQL 表示将相应更新在右下角的语法视图中。关系将默认创建为INNER JOIN;但是,您可以通过点击其在 SQL 语法中以蓝色突出显示的部分,并从弹出菜单中选择不同的连接类型来将其更改为LEFT JOIN或RIGHT JOIN。
或者,您可以切换到视图设计器的Definition选项卡,使用纯 SQL 进行操作。您可以随时在两者之间切换,因为可以从可视化设计生成 SQL 查询,反之亦然。但是,请确保在每个步骤保存视图定义,甚至在每个主要步骤将 SQL 备份到外部文件,因为在可视化编辑器中尝试复杂操作时可能会导致 SQL 查询混乱。
对于我们的示例,在Definition窗格中输入以下 SQL 查询:
SELECT
employee.first_name AS `first name`,
employee.last_name AS `last name`,
employee.title AS title,
emp_log.date_created AS `date joined`,
department.`name` AS `department`
FROM
employee
LEFT JOIN department ON employee.department_id = department.id
LEFT JOIN emp_log ON emp_log.emp_id = employee.id
要预览生成的 SQL 的结果,请点击工具栏上的Preview按钮。如果您的 SQL 语句没有错误,您将在名为Result1的选项卡中看到视图检索的数据。
工具栏上的Explain按钮显示视图的查询计划。
对于高级用户,还有一个名为Advanced的选项卡,您可以在其中为视图设置高级属性。其中之一是Algorithm,它使您能够在执行 SQL 时强制 MySQL 使用特定的算法。
-
默认是Undefined,将选择权留给 MySQL
-
由于Merge算法在大多数情况下更有效,因此 MySQL 在可能的情况下会选择它
-
另一种选择是Temptable算法,它在将结果缓存在临时表中后检索结果
Security选项允许您通过选择定义视图的用户和调用视图的用户之间进行访问权限的自定义。
有关这些设置的更多详细信息,请参阅 Navicat 的手册。
双击保存的视图,将在一个网格窗口中获得结果,这与打开表进行查看或输入数据非常相似。从这个窗口,可以将数据以各种格式导出。有关此功能的详细信息在第三章中有所涵盖,使用 Navicat 进行数据管理。
创建的视图将看起来像以下的屏幕截图:

使用函数和存储过程
MySQL 从版本 5 开始支持函数和存储过程。存储过程是一组 SQL 语句,可以存储在服务器上,以便稍后由客户端、触发器甚至另一个存储过程调用。
现在,我们将创建一个简单的存储过程,该存储过程将选择公司中工资最低、最高和平均的员工。
在 Navicat 中创建这样的例程的默认方式是通过Function Wizard,可以通过工具栏上的New function按钮或者右键单击弹出菜单中选择New Function命令来调用。
在Function Wizard窗口中,选择Procedure,然后点击Next。
然后在点击Finish之前,输入存储过程的以下参数:
| Mode | Name | Type |
|---|---|---|
| OUT | lowest_salary |
decimal(10,2) |
| OUT | l_emp |
varchar |
| OUT | highest_salary |
decimal(10,2) |
| OUT | h_emp |
varchar |
| OUT | average_salary |
decimal(10,2) |
在上表中输入参数后,屏幕截图将如下所示:

点击完成后,创建的Procedure将如下所示:

最后,在下一个屏幕的例程定义中输入以下代码,并将存储过程保存为sp_salaries。
BEGIN
SELECT Min(salary) INTO lowest_salary FROM employee;
SELECT CONCAT_WS(‘’ ‘’, first_name, last_name) INTO l_emp FROM em ployee WHERE salary = lowest_salary;
SELECT Max(salary) INTO highest_salary FROM employee;
SELECT CONCAT_WS(‘’ ‘’, first_name, last_name) INTO h_emp FROM em ployee WHERE salary = highest_salary;
SELECT Avg(salary) INTO average_salary FROM employee;
END
在输入上述代码时,您可以享受 Navicat 的代码编辑功能,如代码高亮、自动换行、自动完成和代码折叠。
现在,为了测试该过程,转到查询节点,创建一个新查询,然后在查询编辑器中输入以下语句:
CALL sp_salaries(@lowestsalary, @low_emp, @highestsalary, @high_emp, @averagesalary );
SELECT @lowestsalary, @low_emp, @highestsalary, @high_emp, @averagesalary;

要查看查询结果,请点击工具栏上的运行按钮,然后就可以看到公司中薪水最低和最高的员工、他们的薪水以及公司所有员工的平均薪水了。
最后,由于我们没有一个用于员工全名的单个字段,而是为名字和姓氏分别创建了单独的字段,我们将创建一个函数,通过将名字和姓氏用单个空格字符分隔起来,返回员工的全名,其 ID 作为输入参数。
为此,我们将几乎按照本节开头的相同步骤进行,只是在函数向导的第一个屏幕中,我们将选择函数而不是存储过程。
接下来,我们将指定类型为int的emp_id作为输入参数,然后点击完成。最后,在函数的定义区域中输入以下代码:
BEGIN
DECLARE fullname VARCHAR(50);
SELECT CONCAT(first_name, ‘’ ‘’, last_name) INTO fullname
FROM employee WHERE id = emp_id;
RETURN fullname;
END
将函数保存为fn_fullname,并通过单击工具栏上的运行来测试它。在提示时,输入您想要显示全名的员工的id。参考下面的屏幕截图:

使用 Navicat 的 MySQL 事件设计器
从版本 5.1.6 开始,MySQL 引入了事件调度程序功能,允许您设计定期任务。在 MySQL 中,事件是由一个或多个 SQL 语句组成的定期任务,这些语句将在特定间隔、开始和结束日期和时间执行。
在本节中,我将向您展示如何创建一个定期事件,该事件将备份我们的员工表,并在特定间隔重复。作为先决条件,我们需要确保 MySQL 的全局事件调度程序处于活动状态(默认情况下处于禁用状态)。
为此,请从 Navicat 主窗口的工具菜单中选择控制台,以获取对 MySQL 服务器的命令行访问,如下面的屏幕截图所示:

在localhost - 控制台提示中,键入以下命令:
mysql> SET GLOBAL EVENT_SCHEDULER=ON;
其次,我们需要创建一个新的存储过程,其中包含一组命令来备份员工表并删除任何现有的备份。
是时候将你在上一节中学到的知识付诸实践了:
- 创建一个名为
refresh_employee_bu的新存储过程,没有输入或输出参数,并在其定义中输入以下代码:
BEGIN
DROP TABLE IF EXISTS employee_backup;
CREATE TABLE employee_backup LIKE employee;
ALTER TABLE `employee_backup`
MODIFY COLUMN `id` int(11) NOT NULL FIRST;
INSERT employee_backup SELECT * FROM employee;
END
-
现在我们准备在 Navicat 中创建一个定期事件;点击工具栏中的事件按钮,然后选择新事件。这将引入 Navicat 的事件设计器。
-
在事件设计器的定义选项卡中,将Definer设置为
root@localhost或使用root建立连接时设置为CURRENT_USER。将Status设置为ENABLE,并选择ON COMPLETION的PRESERVE,如下面的屏幕截图所示:![使用 Navicat 的 MySQL 事件设计器]()
-
然后在定义代码区域输入以下代码:
CALL refresh_employee_bu。这将调用您之前创建的用于备份员工表的存储过程。 -
最后,切换到事件设计师的日程安排选项卡,调整事件的时间,如下截图所示:
![使用 Navicat 的 MySQL 事件设计师]()
我们希望备份过程每个月运行一次,因此请参考上一个截图,调整设置,使事件每个月触发一次,从 CURRENT_TIMESTAMP + 1 小时间隔开始。将此事件保存为backup_employees,然后完成。
注意
要测试预定的事件是否有效,可以设置一个更早的日期和时间以及更短的间隔开始,然后验证其是否有效后,可以将时间设置回合理的频率。
在 Navicat 中使用查询
在 Navicat 中设计查询很像设计视图,不同之处在于视图仅限于 SELECT 语句,而查询可以执行任何CRUD(创建,读取,更新和删除)操作。
就像视图构建器一样,Navicat 的可视化查询构建器允许您以图形方式表示表和字段以及它们之间的关系(连接),并且通过将 SQL 生成交给 Navicat,但是,这种方法仅适用于 SELECT 查询。对于创建,更新和删除查询,您仍然必须手动编写 SQL。
在这一部分,我们将通过一个关于虚构公司Acme.com的想象情景,CEO 对上一财政年度的财务结果感到不满,并认为公司的组织应该进行修订。为此,他希望初步分析公司中谁在做什么,以及他或她在公司中获得多少薪水。
首先,我们将设计一个简单的查询来列出所有部门及其经理。
设计查询
让我们通过点击工具栏上的大查询按钮或从左侧导航窗格中选择查询,然后点击工具栏上较小的新查询按钮,进入查询视图。
在打开的窗口中,默认情况下查询编辑器选项卡是活动的。这是您可以手动编写 SQL 语言来构建查询的地方。我们想要的是可视化设计师,因此我们将切换到查询构建器选项卡。
在这个视图中,我们有一个可视化图表窗格,可以通过在左侧窗格上双击它们的名称,或者简单地通过拖放手势将它们移动到空白区域来创建表和视图的图形表示。
对于这个查询,我们需要部门和员工表并排;因此,在将它们带到舞台后,通过点击它们名称旁边的小方框选择以下字段来构建一个 SELECT 查询:部门表的名称,员工表的名,姓和职称。
接下来,点击部门表的manager_id,将其移动到员工表的id字段上。应该会出现一个带有圆形端点的连接两个字段的线,并且在下面的窗格中预览了可编辑的 SQL 代码。您可以点击 SQL 查询中的灰色单词来添加语法,例如字段和表的别名。这个查询现在几乎准备好了,只是我想在这里使用部门和员工之间的LEFT JOIN而不是INNER JOIN。点击蓝色的INNER JOIN表达式,使用自动显示的下拉列表将其更改为LEFT JOIN,如下截图所示:

现在让我们保存这个查询并执行它,以了解公司的组织情况。我将其命名为qry_departments。
单击窗口工具栏上的运行按钮来执行查询。调用它将切换回查询编辑器,并在生成的 SQL 代码下方的数据网格中检索结果。在这个阶段,我们可以将结果数据导出为各种格式,如文本(csv)、Excel 电子表格、XML、MS Access 数据库(仅限 Windows),甚至是 DBase 文件。Navicat 的导入/导出数据功能的详细信息在第三章使用 Navicat 进行数据管理中有介绍。请参考以下屏幕截图:

注意
与其他数据库对象不同,Navicat 在关闭查询设计器窗口时不会提示您保存查询,因此请确保保存您的工作以避免丢失更改。
构建进一步的查询
在上一节中设计了我们的第一个查询之后,我认为我们可以通过添加一些内容来丰富我们所学到的知识。
回到我们的场景,老板想要一个员工(特别是经理)的名单,他们的月薪超过 15000 美元,他们所在的部门,以及他们的汇报对象。这是我们将设计的下一个查询的规范。如果你擅长 SQL 编程,你可以很快地手工编写这样一个查询。Navicat 的代码编辑器也非常有用,因为它具有代码补全功能、SQL 格式化、代码折叠和括号高亮等功能。然而,为了演示可视化构建器提供的便利性,我想再介绍一些功能来设置过滤条件。对于这个查询,我们将使用department表来检索与员工部门 ID 相关联的部门名称,以及employee表的两个实例——一个用于员工本身,另一个用于获取他们的经理的名称。
打开一个新的查询窗口,并通过从左窗格拖动它们或双击它们的名称将两个employee表和一个department表添加到(图形)图表视图区域。使用别名将第二个employee表命名为manager。您可以通过双击表的标题栏或单击语法视图中略暗的

通过将department表的id与employee表的department_id相关联,然后将employee表与manager表相关联,将employee表的manager_id与manager表的id相关联。将这些关联转换为LEFT JOIN实例,以便我们还可以检索未分配给任何经理或部门的员工。
接下来,选择以下字段:employee表的first_name,employee表的last_name,employee表的title,employee表的salary,employee表的perks,以及查询的department表的name。
现在我们需要指定两个条件:employee.salary必须大于15000或employee.perks必须大于1500。
要在可视化编辑器中添加条件,请单击语法视图中WHERE子句中的符号组<--> = <-->。单击<-->以从查询中所有可用的表字段列表中选择字段。要定义自己的条件,可以直接在编辑选项卡中输入值。单击等号(=)以更改条件运算符。
现在,如果我们执行查询,我们将得到更多或更少我们想要的结果;所有工资超过$15,000 或津贴超过$1,500 的员工。但 CEO 也在列表中。此外,结果表的列名有些奇怪,并且名字和姓氏出现在不同的列中,不太令人满意。在查询编辑器中,我们将手动编辑 SQL 以解决这些问题,同时享受 Navicat 代码编辑器的舒适性。
我认为将名字和姓氏连接起来显示在一个列中是个好主意,将部门名称的列标题更改为有意义的内容,通过向查询添加另一个条件来排除 CEO 的查询结果,并按工资金额降序排序结果。
为了实现这些小目标,我们将修改 SQL 以使其类似于以下代码清单,并重新运行查询:
SELECT
CONCAT_WS(‘’ ‘’,employee.first_name,employee.last_name) AS FullName,
employee.Title,
CONCAT(‘’$ ‘’,FORMAT(employee.salary,2) ) AS Salary,
employee.Perks,
department.`name` AS Dept,
CONCAT_WS(‘’ ‘’,manager.first_name,manager.last_name) AS ManagerName
FROM employee
LEFT JOIN department ON department.id = employee.department_id
LEFT JOIN employee AS manager ON employee.manager_id = manager.id
WHERE
(employee.salary > 15000 OR
employee.perks > 1500) AND
employee.title <> ‘’CEO’’
ORDER BY employee.salary DESC, employee.perks DESC
Navicat 还为我们提供了显示查询概要和状态的能力,借助这一功能,我们可以监视某些状态参数,如表锁定、系统锁定和统计信息,在查询结果窗口的概要选项卡下。参考以下屏幕截图:

总结
在本章中,我们已经涵盖了许多 Navicat 的数据库功能,并学会了如何使用 Navicat 的可视工具创建和管理数据库对象。
我们现在知道如何使用 Navicat 的 GUI 工具来:
-
创建数据库并执行其初始设置
-
创建和管理数据库对象,如表和视图
-
定义外键约束和触发器
-
创建存储过程和函数
-
使用 MySQL 事件调度任务
-
设计和自定义查询
在下一章中,我们将详细了解 Navicat 的数据管理工具,并学习如何使用 Navicat 轻松操作和转换数据库。
第三章:使用 Navicat 进行数据管理
过去,我们中的一些人会以艰难的方式使用控制台窗口中的命令键入数据库及其内容,或者使用功能有限的原始 GUI 工具。当涉及将数据库从一个服务器迁移到另一个服务器,甚至从备份中简单恢复时,这些花招可能变得繁琐。在本章中,我们将看到使用 Navicat 执行所有这些任务是多么简单和节省时间。
此外,我们将使用 Navicat 的复杂工具来操作大块数据,并且您将学会如何:
-
使用各种格式导入和导出数据,如 XML、Excel 文件、
.csv和.sql -
不同数据库之间的直接数据传输
-
同步数据和结构
-
备份数据库以便以后恢复
-
创建和安排批处理作业
使用现有数据库
从这一点开始,我们将使用一个名为 Sakila 的现有示例数据库。除了是 MySQL 标志中海豚的名字外,Sakila 是由 Mike Hillyer 开发的电影数据库的示例,他是 MySQL AB 文档团队的前成员,并旨在提供可用于书籍、教程和文章等的标准模式。它还用于突出显示 MySQL 5.x 中引入的功能,包括视图、存储过程和触发器。MySQL 5.5 社区版的默认安装包括 Sakila 的副本以及另一个名为 World 的示例数据库。如果您的计算机上已经安装了 MySQL 服务器的版本(早于 5.5)并且出于特定原因不想升级,我们已经在本书的示例代码中包含了 Sakila 数据库的转储文件的副本。您也可以从dev.mysql.com/doc/index-other.html下载它。一旦到达页面,选择其他文档选项卡,并查看示例数据库部分。在那里,您还可以找到其他示例数据库,通过这些示例数据库,您可以实验并应用本章中学到的知识,如下图所示:

一旦您下载了 Sakila 的压缩存档(以.zip或.tgz格式)并提取了其内容,您将在名为sakila-db的文件夹中找到三个文件,这些文件称为 SQL 转储文件。我们只需要其中两个——sakila-schema.sql和sakila-data.sql。我们将使用sakila-schema.sql来在我们的 MySQL 服务器上生成 Sakila 数据库;将创建构成数据库结构的所有表、视图、函数和存储过程。另一个文件sakila-data.sql将填充 Sakila 数据库的数据。
从 SQL 转储文件创建数据库模式
现在,要在服务器上生成 Sakila 数据库,我需要您右键单击 Navicat 主窗口的连接窗格中的localhost(或者您为其定义了连接的任何服务器),并按照以下步骤操作:
-
从弹出的上下文菜单中选择执行 SQL 文件...,如下图所示:
![从 SQL 转储文件创建数据库模式]()
-
然后将打开一个新的较小窗口,其中将有两个选项卡,在这里您将指定要执行动作查询的 SQL 文件,即此案例中的 SQL 命令,以创建数据库及其对象。在执行 SQL 文件窗口的常规选项卡下,单击标有文件的字段右端的小方形按钮,以选择
sakila-schema.sql。 -
如果此窗口中的其他设置看起来像屏幕截图中所看到的那样,例如编码应为65001(UTF-8),则可以直接点击开始按钮。
可选地,你可以取消勾选继续错误,以确保你的设置正确,然后 Sakila 将按照预期在你的机器上生成;如果不是,操作将中断,你会提前知道需要重新检查关于数据库服务器安装和连接属性的设置。换句话说,操作应该按照默认设置进行,但如果在执行查询过程中出现任何错误,可能是由于可能的错误配置,最好停止创建数据库,并通过参考前一章节来修订设置。
或者,你可以保持继续错误选项勾选,并执行 SQL 文件中的所有查询。在出现任何错误的情况下,你可以参考这个窗口的第二个选项卡下的消息日志。参考下面的截图:

-
在执行完 SQL 文件后,你将自动切换到消息日志选项卡,如下面的截图所示:
![从 SQL 转储文件创建数据库模式]()
-
在这个阶段,你可以通过再次点击开始按钮或关闭窗口来重新开始。
-
回到 Navicat 的主窗口,似乎没有变化。现在怎么办?不用担心;我们只需要刷新视图,就能看到我们新创建的 Sakila 数据库及其对象。再次右键单击localhost,从弹出菜单中选择刷新(在 Mac 上标记为刷新连接)。
这是 Navicat 最强大的功能之一。仅仅几秒钟,我们就执行了一个 SQL 转储文件,重新创建了一个数据库,而不需要在控制台窗口中输入命令,也不需要经过复杂的屏幕,如下面的截图所示:

所有的表,视图,函数和存储过程现在都列在主窗口中。点击表查看我们有什么。我们几乎拥有典型关系型电影数据库中会找到的每个元素,比如电影,演员,类别,工作人员,以及一些关联表,也称为连接表,比如film_actor和film_category。双击其中一些表来查看它们在 Navicat 中的样子。还有一些自定义视图,比如nicer_but_slower_film_list和sales_by_film_category。
然而,你会注意到这些表和视图都是空的,没有数据。这是因为我们执行的.sql文件只包含了数据库结构。所以我们只创建了空白的数据库模式,我们需要重复本节开头的步骤,执行另一个名为sakila-data.sql的 SQL 转储文件,其中包含了填充数据库的数据。
现在我们拥有了完整的数据库,具有完整的结构,是时候用一些数据填充它了。
在左侧面板的树形视图中右键单击sakila数据库,确保它已连接,验证其小圆柱形图标是否为绿色,然后从弹出菜单中选择执行 SQL 文件。这次选择sakila-data.sql并点击开始。辅助窗口的标题应该变成执行 SQL 文件,消息日志选项卡应该显示[Msg] 完成 - 成功执行了 56 个查询。
导入和导出数据
在上一节中,我们实际上是使用 SQL 转储文件导入了sakila数据库。在本节中,我们将更详细地介绍 Navicat 的导入/导出功能。
作为我们的第一个练习,我们将导出our_first_db,这是我们在第二章与数据库一起工作中创建的数据库,以.sql文件的形式,以便可以在另一个 MySQL 服务器上或者作为同一服务器上数据库的另一个实例上重新生成。要导出our_first_db,请按照以下步骤进行:
-
右键单击our_first_db,然后从弹出菜单中选择Dump SQL file...(如果该菜单项变暗,因此无法使用,您可以首先从同一弹出菜单中选择Open Database,然后再次右键单击进行下一步操作。)
-
最后,指定您希望创建 SQL 转储文件的路径和文件名,并单击保存。您的数据库将被导出或转储到一个
.sql文件中,当按照前一节中描述的方式执行时,将会以与您创建的相同结构和数据重新生成,如下面的屏幕截图所示:![导入和导出数据]()
前面的步骤离导出整个数据库只差一步,尽管 Navicat 中还有其他数据导出方法的变体,这将在本章稍后进行介绍。例如,sakila数据库分为两个独立的.sql文件,一个用于架构,另一个用于数据。如果您使用相同的方法导出sakila,即通过运行Dump SQL file命令,Navicat 将会将整个数据库导出到单个转储文件中。
关于 Navicat 导出 SQL 转储文件的一件事是,Navicat 不会在文件中包含创建数据库的命令,比如CREATE DATABASE db_name。
因此,在执行 Navicat 创建的转储文件之前,您应该首先选择一个数据库或创建一个新数据库,然后继续执行以生成架构并填充数据(如果有)。
如果您打算在不同的管理工具中使用导出的.sql转储文件,比如 phpMyAdmin 或 MySQL Workbench,您应该手动添加 SQL 命令来创建数据库。例如,您可以使用文本编辑器在文件开头添加一行代码CREATE DATABASE our_first_db。
Navicat 最受好评的另一个功能是其能够将数据导出到各种格式。一些主要的格式将在稍后进行介绍。
详细导出
如果您是数据库管理员或某种类型的 IT 分析师,您可能经常收到业务请求,要求您在公司内部网络上提供表或数据库查询的输出,通常以 Microsoft Excel 格式。在这种情况下,Navicat 非常方便,可以导出所需的数据,并提供广泛的导出选项。
您可以打开任何Table、View或Query,然后单击窗口工具栏上的Export Wizard按钮。这样做时,Navicat 会询问您是否要导出表中的所有数据(在 Windows 版本中)。
现在这部分有点棘手。首先,表在表达式表中的所有数据中指的是您正在处理的数据库对象的类型。当您导出View或Query的结果时,导出表中的所有数据意味着您正在处理的View或Query结果列表中的所有数据。其次,所有数据意味着数据库表中的所有记录,即使您显示了有限数量的数据。请注意,Navicat 默认最多显示一千行,以防止对数据库服务器造成过大的负担,当显示Table、View或Query的内容时。
您可以通过单击结果窗口右下角的一个小工具集图标来更改或删除此限制,如下面的屏幕截图所示:

要查看此操作的效果,请按照以下步骤操作:
-
转到sakila数据库中的Tables,双击名为film的表。您应该会看到一列电影,其中包含标题、描述、发行年份等详细信息。
-
单击底部右侧的工具集图标,以设置前一个屏幕截图中显示的结果数量限制。无论如何,数据库sakila中的电影表包含一千个标题,所以在测试下一步将导出多少行之前,将限制设置为
500。 -
现在,单击工具栏上的导出向导按钮(或文件菜单中也有导出向导命令),然后在提示是否要导出表中的所有数据?时单击是。
您将看到导出向导窗口,在那里您需要指定导出文件格式,选项范围从Dbase文件格式到MS Access 数据库或Excel 电子表格到XML。
尽管 Windows 版本的 Navicat 提供了多种文件格式选项可供选择,但 Mac 版本提供的导出文件格式选项较少(这解释了为什么 Mac 版本略微便宜)。具体来说,CSV、纯文本、XML、Dbase 文件(.dbf)和 Excel 格式是文件格式。您可以参考下面的屏幕截图,其中包含 Mac 和 Windows 版本 Navicat 的屏幕截图。此屏幕截图比较了用户界面元素的差异,例如工具栏和图标以及文件导出选项:

在导出到 Excel 时需要注意的另一点是,将创建的电子表格的版本取决于您计算机上安装的 Microsoft Excel 的版本。
- 选择所需的输出文件格式后,您可以单击 Windows 中的下一步(或 Mac 版本中的继续按钮)进行下一步,那里您将设置目标文件名、编码和一些其他选项。
即使您开始在单个表输出上进行导出操作,此步骤也允许您选择数据库中的其他表以将其导出到单独的文件中(除非您最初在提示是否导出所有数据时点击了否);也就是说,您可以将每个表导出到单独的文件中,如下面的屏幕截图所示:

更重要的是,您甚至可以将一个以上的表(或全部表)导出到单个文件中。只需在导出到列下的相应字段中为每个源表指定相同的文件名(和路径)即可完成此操作。这种方法会根据您最初选择的文件格式而产生不同的后果。例如,如果您选择将两个或更多表导出到单个 Excel 文件(.xlsx),每个表将成为同一文件中的单独电子表格。
要设置将要导出的文件的编码,请单击高级按钮以显示一个小弹出对话框。默认的编码是恰当的65001(UTF-8),您可以从下拉列表中进行更改。
在编码选择框下,还有一个复选框,可以将时间戳添加为导出文件名的后缀。这在您经常执行此任务并最终在具有相同名称的文件夹中积累一堆导出文件的情况下非常有用。您甚至可以在YYYY-MM-DD-HHNNSS和MM-DD-YYYY等不同日期模式之间进行选择,以添加后缀到输出文件名中。
注意
在 Navicat 的 Windows 版本中,您有两个选项可以导出到 Excel。其中一个是Excel 电子表格(*.xls),这也是 Mac 版本中唯一可用的选项。第二个是Excel 文件(2007 或更高版本)(*.xlsx)。使用前者选项,您无法成功地将多个源表导出到单个目标文件中,而后者可以实现这一点,因为它使用了安装有 Microsoft Office 的计算机上的某些组件。使用此选项导出的 Excel 文件创建速度较慢,但其版本与 PC 上安装的 Office 版本完全匹配。
- 下一步是通过默认情况下勾选表、视图或查询的所有复选框来选择要导出的列(或字段)。为了省略其中一些列,只需先取消选中所有字段,然后取消选中可用字段下列出的(不)需要的字段。
如果要导出多个表并且要为每个表指定不同的列选择,您需要为要导出的每个表重复此步骤,通过从标记为源表的下拉列表中选择,然后在其下方的列表中选中/取消选中字段名称,当您在表之间切换时,列表会自动更新。
- 在下一个屏幕上,您可以指定是否要在导出文件的顶部包含包含列标题的额外行。此外,您可以选择将导出的记录追加到现有文件中。此外,您可以勾选出现错误时继续选项,这将防止在出现错误时操作停止。
如果您要导出其他文件格式,例如 XML 或文本文件,可能会出现其他选项,例如指定行和字段分隔符、文本限定符以及日期、时间和数字的格式。
注意
从 MySQL 到 Oracle 或 Microsoft SQL 数据库之间传输或交换数据的最佳且可靠的方法之一是在从表中导出数据时使用 XML 格式。
- 完成后,单击下一步以进入最后一步并开始导出过程。如果选择了
.xls格式而不是.xlsx,则导出应在几秒钟内完成。操作完成后,您可以从进度条和消息日志中看到。
将文件导入表格
用于导出表、视图或查询的文件格式与导入数据到表中的文件格式相同。Excel 电子表格、XML 和 CSV 文件是最常用的数据源文件格式之一。
一个业务部门定期向 IT 部门发送 Excel 电子表格,并要求使用其内容更新公司数据库的情况是工作中最常见的情况之一。在某些情况下,制作电子表格的人经常忽略保持列名一致,例如,SALES_REP 可能会在下一次变成 SALES_PERSON,而在另一次变成 SALES_REP_NAME。幸运的是,Navicat 会提示您将源列与目标字段匹配,并灵活地允许您省略一些或添加额外的字段。
从 Excel 或 CSV 文件导入数据时,请记住正确设置字段名称行和第一行数据行,通常情况下不应相同。
在屏幕截图中给出的示例中,您可以看到额外的演员是如何从 Excel 文件导入演员表中的,但是一些列名必须手动匹配命名差异,比如actor_id–actor_no和first_name–name:

除了前面提到的流行数据格式之外,在 Navicat 的 Windows 版本中还可以从 ODBC 数据源导入数据。这需要一些关于 ODBC 设置的知识,以便能够指定连接参数。您可以在 Navicat 的官方手册中找到有关 ODBC 导入的详细信息。
两个数据库之间的直接数据传输
Navicat 的另一个旗舰功能是其能够将数据库对象(表、视图、函数和事件)从一个数据库传输到另一个数据库,或者传输到 SQL 转储文件。目标数据库可以位于同一服务器上,也可以位于另一台服务器上。您只需要按照第一章 入门中描述的方式定义一个连接。数据传输设置也可以保存为配置文件以供以后检索,或者可以安排为作业。
您可以通过从主菜单栏中的工具选择数据传输...,或者右键单击左侧导航窗格中的数据库并选择数据传输...来启动数据传输过程。一旦启动,您可以开始在数据传输窗口中指定设置,如下图所示:

尽管界面相当直观,在常规选项卡下有两个主要区域,分为源和目标,只需让您选择要将哪些对象传输到哪里,但在开始之前有一些要点需要了解,除非您希望通过试错的艰难方式来学习如何使用它。首先,您需要提前准备好目标数据库,这意味着您至少需要创建一个空数据库作为接收数据库对象的目标,因为 Navicat(在我写这篇文章时)不会创建数据库本身,而是将对象复制到指定的目标。您还可以选择将其传输到已包含一些对象的现有数据库,但在这种情况下,您可能希望确保它们与源中的对象名称不同,除非您希望它们被覆盖或跳过。
其次,您可以选择导出到 SQL 转储文件,这在某种程度上类似于我在本章开头展示的内容,只是在此屏幕上,您可以指定 SQL 格式,范围从 MySQL 3.23 到 6.0,通过文件编码。
如果目标服务器版本与您的源服务器版本不同,直接传输可能会失败,您可能需要以这种方式导出 SQL 文件。
高级选项卡是您可以指定一些额外设置的地方,例如在错误时继续和在创建之前删除目标对象。这意味着任何现有的与源相同名称的对象将被覆盖。
与 Navicat 的所有其他实用程序窗口一样,配置设置完成后,单击开始开始过程。该过程可能需要几秒钟到几分钟,甚至几个小时,具体取决于数据库的大小、数据量、两个服务器之间的距离和您的连接速度。我个人通常不需要等待太长时间才能将我的博客数据库从另一个大陆上的网络托管公司的服务器转移,我的博客包括约 2860 篇帖子和评论。
数据和结构同步
如果您在不同服务器上有多个数据库实例,例如一个用于开发,一个用于测试,另一个用于生产,有时要保持一致性可能会很具挑战性,有时在一个服务器上进行更改(很可能是在开发中)需要将完全相同的更改应用到其他服务器上。我们人类经常会忽略一个或多个服务器上的更改,最终在部署后出现意外错误。
Navicat 在这个领域也提供了帮助,其结构和数据同步向导可从工具菜单中访问。
另一个同步工具可能有用的情况是,之前执行的数据传输操作未成功完成。目标数据库可以在此之后使用结构和数据同步进行修饰。
这两个工具的使用方式与数据传输界面几乎相同,您可以彻底指定要比较的源和目标数据库对象以及详细信息。例如,在结构同步中,您可以选择比较表以及主键、外键和索引,还可以选择排除触发器、字符集和常规(Mac 上为常规设置)选项卡下的自动增量值。因此,您可以通过单击适当的复选框来指定要执行的 SQL 命令类型,例如 CREATE、ALTER 和 DROP。您甚至可以选中一个选项,在执行过程后再次进行比较。在 Navicat 的 Windows 版本中,窗口的右下角有一个标有比较的按钮。在 Mac 版本中,按钮位于窗口工具栏的左上角,带有一个天平图标。单击它开始比较源和目标数据库的结构。请参考以下截图:

接下来,我们需要转到名为比较(Mac 上为比较结果)的第二个选项卡,它将为我们提供源和目标之间存在的差异的预览,并且将列出用于同步的 SQL 查询,这些查询将根据窗口后半部分的所需修改进行列出。您可以通过单击相应的复选框来单独选择要执行的查询,或者单击列表中的任何位置以显示弹出菜单,该菜单将允许您选择/取消选择所有内容,并复制 SQL 语法。
完成后,单击运行查询继续。然后,您可以观看消息日志以查看结果。
数据同步稍微简单,您只需选择源和目标数据库。Navicat 会自动列出并匹配双方的表,以便您可以验证双方每个表是否有对应。在高级选项卡下,您可以指定是否要:
-
使用事务
-
显示同步详细信息
-
插入记录
-
删除记录
-
更新记录
最后,您可以单击预览以查看数据将如何同步,然后单击开始按钮让它实际发生,并在消息日志中查看执行的命令。
备份和恢复
在灾难发生时,无论是电力中断导致磁盘故障导致数据库损坏,还是简单地用户错误删除了错误的对象或数据行导致数据丢失,都至关重要备份您的数据库。Navicat 允许您备份所有表(及其记录)、视图、函数和事件,以便以后恢复。
在 Navicat 主窗口的工具栏上有一个带有磁带盒图标的大备份按钮,它将带您进入一个专门用于管理备份的特殊视图,在主工具栏下方出现一个较小的工具栏。这个较小的工具栏有用于创建新备份、恢复备份或删除备份的较小按钮,以及用于从备份中提取 SQL 的按钮。
要创建新的备份,请按照以下步骤操作:
-
从对象窗格工具栏(在 Windows 版本中)单击新备份按钮,或者在对象窗格本身的任何位置右键单击,然后从弹出菜单中选择新备份(Windows 和 Mac)。
-
在出现的窗口中,输入您想要进行备份的备份的属性,例如备份的自己的评论和要包括在备份中的对象。(默认情况下选择所有对象。)
-
然后,单击开始以使用指定的设置执行备份。
Navicat 还在这里提供了一些高级选项,例如压缩、表锁定以及在 InnoDB 表中使用单个事务的能力。
注意
如果选择在高级选项卡中使用压缩,将创建具有.psc扩展名或.psb扩展名的备份文件。
右键单击备份并从弹出菜单中选择对象信息将在窗口底部打开一个附加窗格,您可以在其中查看文件的大小和完整路径,以及最后修改日期。备份默认保存为我的文档下子文件夹的层次结构中的单个文件。例如,我的备份存储在C:\Users\GO\Documents\Navicat\MySQL\servers\localhost\sakila\sakila_bu.psc中。您可以像在 Windows 资源管理器或 Macintosh Finder 中处理任何其他文件一样,将.psc或.psb格式的备份文件复制或移动到另一台计算机。
恢复备份甚至更简单。您可以右键单击备份列表中的备份,然后从弹出菜单中单击恢复备份。要恢复在另一台计算机上创建并复制到您正在使用的计算机上的备份,请单击工具栏上的恢复备份按钮。否则,右键单击对象窗格的空白区域,从弹出菜单中选择恢复备份,并使用打开文件对话框选择备份文件。除非使用root用户连接到数据库,否则请确保您具有创建、删除和插入操作的必要权限。
要删除不需要的备份,您也可以右键单击它并选择删除。
备份也可以通过运行以下命令从命令行界面创建:
| Navicat 对象 | 命令和参数 | 文件扩展名 |
|---|---|---|
| 备份 | Navicat.exe /backup ConnectionName DatabaseName |
.psc(压缩)/.psb(未压缩) |
| 备份服务器 | Navicat.exe /backupserver ConnectionName |
|
| 备份数据库 | Navicat.exe /backupdatabase ConnectionName DatabaseName |
创建和安排批处理作业
在计算机或服务器上执行一系列任务而无需手动干预称为批处理处理,这是大多数数据库管理员每天都在做的事情,如果不是一直在做。这些任务称为作业,设置它们可以在后台无人值守地运行,所有输入数据都是通过脚本或命令行参数预先选择的。
Navicat 提供了类似的功能,允许您创建批处理作业并设置计划,可以在定义的间隔或特定日期和时间执行,或两者兼而有之。
批处理作业可以用于查询、报表打印、备份、数据传输、数据同步以及数据导入和导出。您可以定义要在单个批处理作业中执行的操作列表,可以手动运行,也可以安排在指定时间运行,甚至可以定期运行。
您可以通过选择菜单栏中的查看 | 计划或按下主工具栏上的日历图标按钮切换到与批处理作业和计划相关的视图。
要创建新的批处理作业,请按照以下步骤进行:
-
单击对象窗格中的空白区域。
-
右键单击并从弹出菜单中选择新批处理作业,或者从对象窗格工具栏中单击新批处理作业按钮。
-
输入作业的属性基本上包括从可用作业中选择要执行的操作,将它们按照所需顺序放置,并指定一些高级设置,例如配置电子邮件通知,如下图所示:
![创建和安排批处理作业]()
您可以通过按下工具栏上的设置任务计划按钮来设置此作业的执行时间。这将带来另一个弹出窗口,在其中您可以在计划选项卡下设置作业的周期或频率,或指定开始日期和可选的结束日期,以及重复次数。
高级选项卡允许您配置电子邮件,以便在批处理作业自动运行后通知用户或一组用户的结果。甚至可以附加从导出向导或数据传输中生成并发送的电子邮件的文件输出。
要基于现有作业创建批处理作业,请选择作业,然后单击对象窗格工具栏上的“设计批处理作业”,或者从右键单击作业触发的弹出菜单中选择它。完成修改后,您可以单击编辑窗口工具栏上的“另存为”按钮,或者从菜单栏中选择“文件”|“另存为…”。
实现相同结果的另一种快速简便的方法是在选择作业后复制并粘贴作业,然后对复制的作业进行所需的修改。
总结
在本章中,我们已经处理了不同的数据操作技术,将数据从一个数据库转移到另一个数据库,并将其转换为各种文件格式。
您还学会了通过结构和数据的方式同步数据库的两个实例。
备份和恢复操作,以及批处理作业的创建和调度,在数据库的生命周期(以及 DBA 的生活)中也是必不可少的,您已经学会了如何使用 Navicat 提供的快速简便工具来完成这些任务。
在下一章中,您将进入 Navicat 的数据建模。
第四章:使用 Navicat 进行数据建模
从 Navicat 的 10 版本开始,该应用程序增加了一个数据建模功能,允许用户在可视化编辑器中创建和编辑数据库对象,如表、字段和关系。
PremiumSoft(Navicat 的制造商)还将此功能作为一个名为Navicat Data Modeler的独立应用软件产品发布,可在 Windows、Mac OS X 和 Linux 上使用。对于那些专门需要数据建模的可视化工具,而不需要其他管理和数据管理工具的人来说,Navicat Data Modeler 可能是一个合适的选择。
虽然 Oracle 的 MySQL Workbench(用于 MySQL 的 GUI 管理和数据库建模工具)可以被认为是一个免费的替代品,但 Navicat Data Modeler 提供了更容易操作模型对象的手段,并且还提供了一些高级功能,如历史跟踪和数据库同步;由于这一点,您可以异步地处理数据图表,以便稍后与实际数据库结构进行同步。为了更好地理解 Navicat 建模工具的功能,我们将通过跟随教程来设计我们的第一个数据模型,以帮助您逐步学习每个功能。
在本章中,我们将学习如何掌握 Navicat 的可视化数据建模工具,这使得以下操作变得容易:
-
在 GUI 中设计数据模型
-
在可视化编辑器中创建、编辑和操作表结构
-
将数据模型转换为
.sql文件 -
将现有数据库反向工程成可视化表示
使用 Navicat 的模型设计师
在我们开始设计第一个数据模型之前,熟悉 Navicat Data Modeler 提供的工具是一个好主意,我们可以利用这些工具。
在 Navicat 的主窗口的主工具栏上的最后一个按钮是Model按钮。单击此按钮将带您进入模型视图。另一种方法是从View菜单中选择Model(在 Mac 上,您可以同时按下+键和8键作为快捷键)。然后,您可以通过右键单击主窗口的对象窗格中的任何位置并选择New model来创建一个新的空模型。
注意
在 Mac 上,同时按下+键和N键作为快捷键,或者在主窗口的左下方框架上单击+按钮。在 Windows PC 上,只需单击主窗口中主工具栏下方的次工具栏上的New Model按钮。
Navicat 在 Mac 和 Windows 上的工具栏截图如下:

这个操作也会弹出一个名为模型设计师的新窗口,您可以在其中编辑数据模型。模型设计师窗口的左侧窗格包含了一个树形调色板的图表,可以帮助您切换到其对应的模型树调色板;通过点击其上方的小图标,可以获得一个模型树调色板。图表树调色板按字母顺序列出了模型对象,如表、关系、注释和活动图表的图片。模型树调色板只列出了模型中所有图表对象。这些隐喻可能会非常令人困惑,所以我将简要描述每个隐喻的含义,并解释它们的层次结构。
每个模型可以包含一个或多个图表,这也可以称为数据库管理员的实体-关系图(ER 图)。数据库设计可以分布在模型内的多个图表中。还有层的概念,但与图形和图像处理应用程序不同,Navicat 的数据建模器中的层不是容器或占位符。与其他对象一样,它们绘制在画布上,但有一个细微的区别,使它们不透明并且可以叠加在其他对象上。层可以用于通过将相关对象分组并根据不同的关注点进行分离来组织某些对象。例如,在设计 ERP 数据库时,您可能希望将与会计和财务相关的表汇集在一层中,并将与销售和营销相关的表汇集在另一层中。

其右侧对齐的是一个垂直工具栏,也称为模型图表调色板,您可以从中选择要放置在图表中的数据库对象类型。在此上下文中可用的对象包括表、注释(标签)、图片(图像)、层和关系。窗口的右侧包含属性调色板(在 Windows 中位于左下角),用于显示和编辑活动图和其中包含的对象的属性。在这里,您可以管理与画布中所选项目相关的每个设置,包括重命名图表、调整页面数量(打印时很重要)、调整对象标签的字体和颜色,以及图表的符号。有五种可用的符号——默认、简单、IDEF1X、UML和Crow's Foot。
属性调色板下方是历史调色板(在 Mac 版本中),它逐步列出您执行的每个操作,允许您按照您希望的步骤数撤消这些操作。在相反的一侧还有一个预览窗格,几乎对称地放置,您可以用它进行类似地图的导航。在 Windows 版本中,这两个调色板放置在彼此的确切相反位置。请参考 Mac 版本中 Navicat 的以下截图:

创建我们的第一个模型
本节介绍了一个教程,我们将为数据库创建一个相当简单的待办事项应用程序的模型。我们的新数据库将包括三个表——任务、类别和用户。使用模型设计工具,我们将设计这些表,还将定义字段类型、主键和关系。这三个表将使用外键相互关联。然后我们将对模型进行注释,最终生成实际的数据库,将我们创建的模型进行正向工程。要开始对模型进行操作,请切换到“模型视图”窗口(如果尚未这样做),方法是单击 Navicat 主窗口主工具栏上的大“模型”图标;或者从“视图”菜单中选择“模型”,然后右键单击对象窗格中的空白区域,选择“新建模型”。在 Navicat 的 Windows 版本中,您还可以直接单击主窗口下方主工具栏下方的“新建模型”按钮。在 Mac 版本中,没有次要工具栏。相反,在足够宽的下框架上,有一个“+”号。这个“+”号直观地表示在所选上下文中添加对象的功能。在这种情况下,一个模型伴随着另外两个按钮;一个是带有“-”符号的按钮,表示删除,另一个是带有铅笔图标的按钮,表示编辑。(Windows 版本有相应的按钮,明确标记为“设计模型”和“删除模型”)完成此步骤后,将弹出一个名为“Untitled-Model”的新模型设计师窗口,向您呈现一个名为“Diagram 1”的空白图。现在,让我们准备开始编辑模型,通过在图表中创建我们的第一个表。单击垂直模型图工具栏上的“表”按钮(一个带有表形图标的小按钮),然后单击画布的空白区域。您还可以右键单击画布,然后从弹出菜单中选择“新建”|“表”。在您上次单击的位置,将在画布上绘制一个新的类似正方形的带有圆角的框,带有蓝色标题栏标记为“表 1”,也突出显示,表示它已准备好为您方便地重命名。为了重命名它,请键入category并按“Enter”键。接下来,在框内右键单击,然后从弹出菜单中选择“添加字段”。(另一种快捷方式是在编辑表或字段名称时,从键盘上按下箭头键或“Tab”键。)您会注意到一个文本光标在代表表的框内闪烁。
键入id并按“Enter”键。当 Navicat 创建字段时,它还会根据您输入的名称感知到这个字段的用途,并自动将字段定义为INTEGER类型的主键。现在继续并重复上一步,这次键入name作为字段名称,并按“Enter”键。欣喜!Navicat 也正确感知到了这个字段,并将其创建为长度为 255 个字符的 varchar 类型。255 个字符的长度也许有些夸张,但我们将看到如何稍后将其缩小。ID 和名称字段对于类别表已经足够了,所以我们现在转向第二个表。请参考以下屏幕截图,查看表“category”和“task”是如何创建的:

-
创建另一个表,并将其命名为
task。 -
为此也添加一个名为
id的字段(看看 Navicat 如何将其创建为另一个INTEGER类型的主键)。 -
将第二个字段命名为
title并按“Enter”键。(Navicat 将创建一个VARCHAR(255)类型的字段。) -
以同样的方式,添加以下字段——
description、due_date、category_id和user_id。(Navicat 将确定它们应该创建的类型。) -
创建最后一个表,并将其命名为
user。 -
为此创建以下字段—
id、login_name、password、email和role。
现在,我们需要微调一些这些字段。例如,我们将把这些 varchar 字段的长度从 255 个字符减少到一些更合理的长度。要做到这一点,右键单击任务,然后从弹出菜单中选择设计表。这将使一个表设计界面非常类似于您在第二章与数据库一起工作中看到的表。在 Mac 上,表将看起来类似于以下截图:

在这个屏幕上,您可以添加或删除字段,或重命名它们,更改它们的数据类型,更改数据长度,分配或删除主键,为字段定义默认值,添加索引,甚至添加诸如外键或唯一性定义之类的约束。
您甚至可以通过手势将鼠标拖放字段来重新排列字段。
在这个例子中,我们将把标题的长度减少到50,描述的长度减少到200。
您可以参考第二章与数据库一起工作,了解有关表设计界面及其提供的功能的更多详细信息,用于编辑和调整表结构。
定义关系
现在我们有了三个相关的表,是时候定义它们之间的关系了。这个模型是用于一个简单的待办事项数据库,我们的主要数据将存储在任务表中。在这里输入的每个任务都将有一个标题、描述、录入日期、截止日期、类别和用户。我们在单独的表中存储类别和用户,因此我们需要从任务表中引用相关的类别和用户,使用 ID 列。类别表和任务表之间存在多对一的关系。在我们的情况下,一个任务可以与一个类别关联,但一个类别可以有多个任务。因此,一个任务可以分配给一个用户,但一个用户可以有多个任务。
要在两个表之间建立连接,首先从垂直调色板中选择关系工具,然后将指针移动到任务表,点击并拖动category_id字段,将其拖放到类别表的id字段上。这样应该建立了两个表之间的连接,在画布上连接它们的一条线应该出现。
但这还不是全部。到目前为止,我们所做的是建立一个基本的一对一关系,没有进一步的关于两个对象之间基数的信息,如下图所示:

现在,右键单击相邻的线,然后从弹出菜单中选择类别上的基数 | 一对多。现在,两个表之间建立了一对多的关系,从类别到任务的外键也自动创建了;此外,连接线的类别端将在图表中有一个类似叉子的连接点。图表编辑器(直接在画布上编辑)的一个缺点是,当关系通过点按和拖放手势进行视觉定义时,线的连接点可能不会放置在引用和被引用字段的开始或结束位置。因此,您需要通过点击和拖动连接点来手动调整它们,将它们调整到图表对象的正确位置(当然,如果您希望在这些关系的视觉表示中获得更多精度)。
我们也可以使用弹出菜单中的设计关系...命令,这相当于双击连接线,这将带我们回到具有外键选项卡激活的表设计界面。在这里,您可以微调相邻表-字段对的外键定义;此外,它还为您提供了引用多个字段的灵活性。
正如你所见,最好同时使用画布编辑和表设计工具,而不是作为替代方案,以充分利用两个世界,并在数据建模中获得最大的灵活性。参考以下截图,看看外键是如何创建的:

注意
正如许多数据库管理员和软件项目经理所建议的(如果不是必须的),在创建数据库对象时遵守某些命名约定是一个好主意,特别是像外键这样的约束。我喜欢将外键命名为以表名为前缀的fk_,然后是_4_,然后是被引用的表名,最后是其主键字段的名称。例如,在任务-类别关系的情况下,我使用fk_task_4_category_id作为外键名称,这意味着这个约束是为任务表定义的外键,它引用任务表自身的category_id字段从类别表的id字段。
虽然 Navicat 为数据库对象管理提供了许多人性化的功能,特别是约束和索引管理,但许多其他工具却没有。如果需要修改,对于不使用复杂 GUI 工具来管理数据库的人来说,要找到数据库中的外键或其他约束可能会变得很麻烦,除非从头到尾都遵守某种命名标准,并且所有人都遵守。
编辑完成后,点击屏幕右下角的确定按钮保存更改,或者点击取消放弃更改。
通过注释和图片为模型增添一些活力
想象一种情况,你正在设计一个数据库模型作为项目提案的一部分,你希望你的模型看起来漂亮和吸引人。嗯,除了一个精心设计的 ER 图表之外,可能还需要更多。垂直模型图表面板上的附加对象,我称之为注释工具,可以帮助你实现这一点。
点击垂直模型图表面板上一个黄色图标的小按钮,激活注释工具,然后点击画布上的空白区域放置一个便利贴。你可以双击它来编辑它的文字,如下截图所示:

我们刚刚添加的注释看起来确实像一个便利贴,我个人认为它看起来很不错。但如果你想改变注释的外观(比如颜色和文字样式),你可以在属性窗格中尝试不同的设置。属性编辑器可以让你调整注释的颜色,(矩形)大小,位置,甚至字体大小和样式。
如果你不想在你的模型上贴一个便利贴,而是想要更现代的东西,你可以选择让纸张状的图形完全消失,只留下文字。要做到这一点,只需点击箭头工具,使注释保持高亮(或选中),然后在属性窗格中从下拉列表注释样式中选择标签。在 Windows 中,右键点击注释,然后转到样式 | 注释。
在注释图标的下方,有一个带有小图片图标的图片工具。你可以通过首先点击激活此工具,然后在画布上的任何位置点击来向图表中添加任何图片或图像。这将提示你使用操作系统的标准打开文件对话框,从磁盘中选择一个图像文件或照片。这样做后,你选择的图像将被放置在你在画布上点击的位置。例如,你可以将公司标志放在一个角落,使外观更加企业化。
使用图层
正如前面提到的,Navicat 的模型设计中的图层只用于给画布的某些区域上色以进行注释,并且可以用于标记画布的某些业务逻辑类型的表。例如,你可能想要将与人力资源相关的表分开,并将它们放在一个特定图层的边界内,将与制造和物流相关的表放在另一个图层中,例如,在一个由不同图层区分的不同区域中,最好是用不同的颜色在同一个图表中。
要创建一个图层,只需点击垂直调色板上关系工具上方(图像工具下方)的图标,然后在画布上点击并拖动你想要放置图层的矩形区域。
注意
请记住,图层既不是容器也不是占位符,它们除了作为视觉辅助外没有其他用途。
删除不需要的对象
当你在模型设计中创建一个表时,它会同时存在于图表和模型中。此后从图表中删除表并不一定意味着它会从模型中删除,但好消息是,你会被询问你想从哪个上下文中删除表,只要你右键点击表并选择“删除”|“从图表中删除”或“删除”|“从图表和模型中删除”。
有什么不同?嗯,这个决定会影响从模型设计生成数据库时将创建的对象。在本节的最后,你将学会如何通过从模型设计生成 SQL 来正向工程化数据库。
除了表和关系之外的对象对数据库结构没有影响,因此从图表中删除它们也会从模型中删除它们。
使用多个图表
正如本章开头所讨论的,一个模型可以包含多个图表。如果你正在处理非常庞大的数据库,其模型太大无法管理,那么在模型内使用多个图表可能是必要的,你别无选择,只能将它们分成子组并放置在不同的图表中。
我们不会详细介绍在同一个模型中使用多个图表的工作。但是,我想在这里提到一些要点。此外,Navicat for Windows 的用户界面在某些方面与 Mac 版本不同,因此我将尝试简要解释两个用户界面之间的区别。
在 Windows 和 Mac 平台上,你可以通过在模型设计窗口的工具栏上点击“新建图表”按钮来创建一个新的图表。在 Windows 上这样做时,新的图表会出现在画布区域上方的新标签下。你可以通过点击它们的标签来在图表之间切换。
在 Mac 版本中,画布的左上方没有标签栏,而是一个下拉菜单,标有活动图表的名称。此外,在 Mac 版本中,每个窗口的左下方都有一个形状像齿轮的小黑色图标。点击它会弹出一个菜单,让你添加与当前上下文相关的对象。要在 Mac 上切换图表,只需点击其名称,然后从打开的下拉菜单中选择你想要切换的图表的名称。
将模型图表导出到 SQL
我们已经完成了一个简单但功能齐全的数据库模型设计。现在是时候将其投入使用了。
我之前提到过,可以从模型生成数据库的可能性。要实现这一点,我们首先需要将我们的设计导出到一个.sql文件中。
在 Mac 上,模型设计窗口的工具栏上有一个标有导出 SQL的按钮。当您按下它时,画布上会出现一个导出设置表单,您必须在其中指定要导出的表,并可选择指定一些高级设置,例如排除生成的 SQL 中的 DROP 语句、主键、索引和外键。如果您不想省略任何内容,可以将这些设置保持不变。
然而,在 Windows 版本中,工具栏上没有导出按钮;相反,您必须从菜单栏中选择工具 | 导出 SQL...。
我建议您取消 DROP 语句的选项,因为这是我们第一次创建Simple To Do数据库,可能会导致 SQL 错误。
您可以将要导出的文件命名为simple-todo.sql,然后继续导出过程。
导入和导出数据在第三章中有详细讨论,使用 Navicat 进行数据管理。
导出文件的源代码应该类似于以下内容:
CREATE TABLE category (
id INTEGER NULL,
name VARCHAR(31) NULL,
PRIMARY KEY (id)
);
CREATE TABLE task (
id INTEGER NULL,
date_created DATE NULL,
title VARCHAR(50) NULL,
description VARCHAR(200) NULL,
due_date DATE NULL,
category_id INTEGER NULL,
user_id INTEGER NULL,
PRIMARY KEY (id)
);
CREATE TABLE user (
id INTEGER NULL,
login_name VARCHAR(12) NULL,
password VARCHAR(12) NULL,
email VARCHAR(40) NULL,
role INT NULL,
PRIMARY KEY (id)
);
ALTER TABLE task ADD CONSTRAINT fk_task_4_category FOREIGN KEY (category_id) REFERENCES category (id);
ALTER TABLE task ADD CONSTRAINT fk_task_4_user FOREIGN KEY (user_id) REFERENCES user (id);
最后,通过应用您在第二章中学到的知识,与数据库一起工作和第三章中学到的知识,使用 Navicat 进行数据管理,您可以创建一个名为simple_todo或todo的新数据库,并执行 SQL 文件...从我们导出的模型生成数据库。
注意
您还可以将以下代码粘贴到查询窗口中,并执行查询以实现相同的结果,前提是您已经创建了空白数据库。
将数据库反向工程成模型
在前几节中,我们学会了如何从头开始设计数据模型。现在您已经熟悉了数据建模工具和图表结构,我们可以开始从现有数据库生成模型。
对于这一部分,我选择了 Sakila 示例数据库,我在第三章中介绍了使用 Navicat 进行数据管理。如果您已经按照上一章的教程操作,那么您必须有一个可用于反向工程成数据模型的sakila数据库的工作副本。如果没有,现在是一个好时机来看一看,并至少按照步骤将sakila数据库导入到您的 MySQL 服务器中。
转到 Navicat 的主窗口,在连接窗格中找到sakila数据库;右键单击其名称,然后从弹出菜单中选择反向数据库到模型...。
新的模型设计窗口应该立即显示出 Sakila 数据库的所有表和关系的可视图表,如下面的屏幕截图所示:

您可以尝试应用本章学到的知识,例如添加注释和图层,以及微调连接线。
如果您最终修改了模型,添加了表、字段和关系,您可以将这些更改同步回sakila数据库,而无需从 SQL 文件重新生成整个数据库。
要做到这一点,只需点击工具栏上的同步按钮(在 Mac 上),或者从菜单栏中选择工具 | 同步到数据库...(在 Windows 上)。
有关数据同步过程及其设置的详细信息在第三章中有详细介绍,使用 Navicat 进行数据管理。
总结
我们从让您熟悉 Navicat 的可视化数据建模工具开始,介绍了它引入的隐喻,以及如何设计表、字段、约束和这些对象之间的关系。这些都是视觉和基于表单的工具,类似于前几章介绍的 Navicat 的其他工具。
使用这些工具,您学会了如何从头开始设计数据库模型,然后实际从模型生成了数据库。
最后,我们对一个更大的现有数据库进行了逆向工程,并使用一键向导自动生成了其可视化模型,您已经学会了如何在模型上进行进展时将更改同步回数据库。
第五章:数据库维护和安全管理
MySQL 是最流行的数据库平台之一,被广泛用于驱动互联网上的数据库驱动网站,并经常被用于用 PHP 编程的 Web 应用程序。MySQL 提供了高性能、易用性和简单安装等功能,但是在 5.5 版本之前,MySQL 的默认安装带有一个名为root的用户,没有密码,这带来了一个相当令人担忧的安全漏洞。
MySQL 5.5 及更高版本需要一些基本配置,包括某些安全措施,不限于在安装后立即为root用户设置密码,而 MySQL 5.1 的新安装必须在尽早的时候为root用户设置密码。Navicat 不仅使这些配置易于管理,而且还提供了一些有用的安全管理和数据库维护工具。
本章重点介绍使用 Navicat 进行 MySQL 的基本数据库管理员(DBA)功能,涉及安全和维护。通过本章结束时,您应该能够掌握在 Navicat 中为 MySQL 执行以下操作:
-
创建和编辑 MySQL 用户
-
管理用户权限
-
执行维护任务,如数据库分析、优化和修复
使用 Navicat 进行用户和权限管理
MySQL 数据库安全的第一个主题是用户和权限管理。在 Navicat 主窗口中带有图标的工具栏上的第二个按钮是用户按钮。激活它将在对象窗格中显示属于连接窗格中所选 MySQL 服务器的所有用户。所有属于屏幕左侧的选定 MySQL 服务器的用户都在屏幕左侧。
添加、编辑、复制和删除用户与在 Navicat 中管理任何其他数据库对象一样,所以如果您感到迷失,请快速回顾一下。以下截图显示了所有属于选定 MySQL 服务器的用户:

与用户管理上下文相关的次要工具栏,在 Navicat 的 Windows 版本中,明确展示了用于编辑现有用户、添加新用户和删除现有用户的实用按钮,此外,您还会注意到一个带有锁图标的不同按钮,名为权限管理器。权限管理器按钮是在 Navicat 的第 10 版中引入的,它就像一个命令中心,您可以在其中管理所有模式的所有用户,并在单个窗口内查看整个服务器的所有权限矩阵,或者特定目录(数据库)的所有权限。
在 Navicat 的 Mac 版本中,界面是完全不同的,因为主窗口下面没有次要工具栏;相反,您可以使用窗口底部的小图标(带有加号、减号和铅笔形状图标)来创建、编辑和删除用户。至于权限管理器按钮,您需要从菜单栏中的连接菜单(在连接窗格中选择服务器时)或数据库菜单(在选择服务器下的数据库时替换连接菜单)中选择设置权限...命令。以下截图显示了 Mac 平台上的用户列表:

权限管理器按钮提供了对定义的服务器的所有连接、它们拥有的所有数据库以及为它们存在的所有用户定义和设置的各种权限的底层视图。
起初可能会显得有些复杂,因为它旨在从一个地方控制与特权相关的一切。但这并不一定是管理权限的唯一手段。在后面的部分中,您将看到如何逐步为特定用户设置它们。事实上,“特权管理器”按钮在单个界面中概括了您将在后面部分中看到的有关编辑对象权限的内容。

在第一章,“入门”中,当您首次连接到 MySQL 服务器时,还定义了root用户的设置。root用户在切换到“用户”视图时始终显示在对象窗格中(除非出于特定原因被删除,当然,这应该是一个很好的原因,我可能会补充说明)。用户名后面添加了@符号,该符号后面是用户被允许连接的服务器名称;在这种情况下,服务器名称是localhost。如果您希望root用户从远程机器连接,那么您必须添加另一个具有相同名称的用户;在这种情况下,用户名是root,但在“主机名”字段中指定该远程机器的域名或 IP 地址。例如,您可以看到myuser@workpc。
MySQL 如何处理访问权限
Navicat 的在线手册提供了以下关于 MySQL 的信息:
-
MySQL 权限系统的主要功能是对连接到给定主机的用户进行身份验证,并将该用户与数据库上的特权(如 SELECT、INSERT、UPDATE 和 DELETE)关联起来。
-
有关用户权限的信息存储在名为mysql的数据库中的user、db、host、tables_priv、columns_priv和procs_priv表中。MySQL 服务器在启动时读取这些表的内容。
-
MySQL 访问控制在运行连接到服务器的客户端程序时涉及两个阶段,即 Navicat:
-
阶段 1:服务器检查是否应允许您连接。
-
阶段 2:假设您可以连接,服务器将检查您发出的每个语句,以确定您是否具有足够的权限执行它。例如,创建表权限、删除表权限或修改表权限。
-
服务器在访问控制的两个阶段都使用 mysql 数据库中的 user、db 和 host 表。
深入了解在 Navicat 中创建和编辑用户
Navicat 的用户设计工具提供了灵活性,可以向任何用户授予或撤销服务器权限,并采用选择性方法,以便在特定数据库、表、视图(甚至单个字段)、函数和过程上单独管理权限。
与任何其他对象一样,为了在 Navicat 中创建和编辑用户,您可以使用相关的工具栏按钮(在前一节中描述),或者右键单击用户列表以从弹出菜单中选择必要的操作,“添加用户”、“编辑用户”或“删除用户”。
在打开的用户编辑窗口中,您必须在“常规”选项卡下填写基本用户属性,如“用户名”、“主机”和“密码”。
完成后,您可以切换到“高级”选项卡,在那里您可以指定每小时为用户分配的查询和连接数量(限制)。所有值都设置为 0(默认),在这种情况下意味着无限制。
您需要勾选使用 OLD_PASSWORD 加密选项,以为需要连接到 4.1 或更高版本的 MySQL 服务器的任何早于 4.1 的客户端设置密码。否则,服务器将生成长密码哈希。该选项不影响身份验证(MySQL 4.1 及更高版本仍然可以使用具有长密码哈希的帐户),但它确实防止了在用户表中创建长密码哈希作为更改密码操作的结果。以下是高级选项卡的屏幕截图:

SSL 窗格允许您指定与 SSL 相关的选项,例如身份验证类型和证书属性。有关配置 SSL 选项的更多信息,您可以参考 Navicat 的在线手册。相关部分位于服务器安全管理 | MySQL 安全管理 | MySQL 用户设计 | 设置高级 MySQL 属性下。
服务器权限选项卡是您可以向用户授予服务器范围的权限,然后应用于该服务器上的所有数据库的地方。一旦授予,用户将在服务器上的所有数据库上具有相同的定义权限。由于权限列表按字母顺序排列,您只需在第二列中的列表项对应的小框中选中或取消选中。当您编辑root用户时,您会注意到所有权限都将显示为已选中。要选择(或取消选择)列表中的所有项目,请右键单击列表中的任何位置,弹出菜单中显示授予所有和撤销所有命令。
在 Mac 中,在对象权限选项卡下,您可以为任何选定的数据库对象(无论是整个数据库本身还是特定表、字段、视图或过程)添加单独的权限,如下屏幕截图所示:

在 Windows 中,单击权限选项卡以添加权限。
要编辑用户的特定对象权限,请单击添加权限以打开次要模型窗口,并按照以下步骤操作:
-
展开树视图中的节点,显示从数据库到单个对象(如表和字段)的层次结构,直到达到您想要定义权限的目标对象。
-
勾选对象以在右侧窗格上显示权限列表。
-
在列表中,针对权限列下列出的权限类型,选中授予选项以分配给用户。当然可以授予多个权限。
-
完成后单击添加按钮,然后记得按下用户编辑窗口主工具栏上的保存按钮(用软盘图标表示)。
SQL 预览选项卡生成 SQL 命令,需要在服务器上运行以授予或撤销权限,自上次保存权限设置以来。因此,这些 SQL 命令在单击保存按钮后会自动执行。
以下是编辑权限生成的 SQL 命令的一些示例:
GRANT Alter, Create View, Grant Option, Create ON `sakila`.* TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`actor` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`address` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`city` TO `producer`@`localhost`;
GRANT Alter, Create View, Grant Option, Create ON TABLE `sakila`.`country` TO `producer`@`localhost`;
GRANT Create View, Select, Show View ON TABLE `sakila`.`customer` TO `producer`@`localhost`;
使用 Navicat 执行维护任务
Navicat 提供了一组用于数据库和表维护任务的图形工具,实际上是本机 MySQL 服务。为此,Navicat 支持可以在 MySQL 数据库表上执行的四个主要任务:
-
分析
-
检查
-
优化
-
维修
在编写本书时,Navicat 没有专门的菜单(在菜单栏中)或按钮来触发这些任务。基本上,您需要在 Navicat 的主窗口中切换到表或视图,然后右键单击要执行其中一个任务的表或视图。然后,从弹出菜单中选择维护,然后选择相关任务作为子菜单项。现在,让我们更仔细地看看这些任务是什么,以及它们有什么用处,如下屏幕截图所示:

使用 Navicat 分析 MySQL 表或视图
分析表命令分析并存储所选表的关键分布。MySQL 使用存储的关键分布来决定表应该以何种顺序连接。
当分析开始时,如果表的底层数据库引擎是 MyISAM 或 BDB,则使用读锁定表。在 InnoDB 的情况下,使用写锁定表。目前,MySQL 仅支持对 MyISAM,BDB 和 InnoDB 表进行分析。对于 MyISAM 表,此操作相当于运行命令myisamchk --analyze。
检查表或视图
此维护任务检查表中的错误。在撰写本书时,MySQL 仅支持对 MyISAM,InnoDB 和 ARCHIVE 表进行检查。检查 MyISAM 表时,它们的关键统计信息也会更新。
以下是检查的其他选项的摘要:
| 选项 | 功能 |
|---|---|
| 快速 | 不扫描行以检查不正确的链接。适用于 InnoDB 和 MyISAM 表和视图。 |
| 快速 | 仅检查那些未正确关闭的表。仅适用于 MyISAM 表和视图。 |
| 更改 | 仅检查自上次检查以来已更改或未正确关闭的表。仅适用于 MyISAM 表和视图。 |
| 扩展 | 对每一行的所有键进行完整的键查找。这确保表是 100%一致的,但需要很长时间。仅适用于 MyISAM 表和视图。 |
优化变得简单
优化表的主要原因是回收未使用的空间并整理与表相关的数据文件。如果您从表中删除了大量行或经常更新具有可变长度行的表(具有varchar,blob或text字段的表),则应优化表。由于优化任务,删除的记录将保留在链接列表中,并且随后的INSERT操作将重用旧的行位置。
在撰写本书时,MySQL 仅支持对 MyISAM,InnoDB 和 BDB 表进行优化。
对于 MyISAM 表,表优化的工作如下:
-
如果表中有已删除或拆分的行,请修复表
-
如果索引页未排序,请对其进行排序
-
如果表的统计信息不是最新的(并且无法通过对索引进行排序来修复),请更新它们
修复表
标题的意思就是字面意思。如果您怀疑表格损坏或者工作状态不佳,您可以执行修复表,在大多数情况下它可以解决所有问题。修复可以以两种模式进行——快速或扩展。快速修复仅尝试修复表的索引树。在扩展模式下,MySQL 逐行创建索引,而不是一次创建一个索引。
总结
您已经到达本章的末尾。到目前为止,您应该能够在 Navicat 中创建,编辑和删除用户,为他们分配服务器范围的特权,甚至为特定数据库对象定义个别特权,并为特定用户分配它们。
在故障排除方面,您现在也知道如何分析和检查 MySQL 表或视图的错误,并确保它们正常运行。您还学会了如何使用 Navicat 的一键维护工具来优化和修复 MySQL 表。
第六章:使用 Navicat 设计报表
Navicat 版本 10 的 Windows 版本附带了强大的报表生成器,并且在书写本书时,它独家出现在企业版中。使用 Navicat 的报表生成器,您可以在各种报表中呈现来自 MySQL 数据库的数据,例如发票、销售数据、订单摘要,甚至表单和邮寄标签(也称为邮件合并)。您甚至可以设置调度程序(参见第三章,使用 Navicat 进行数据管理)以便在特定时间和/或定义的间隔自动传递报告。
正如您将在接下来的章节中看到的,Navicat 的报表设计器的外观和感觉在许多方面都类似于 Microsoft Access 的报表模块。
为了能够在本章中跟随教程,您需要导入第三章中介绍的 Sakila 示例数据库。
从 Navicat Premium 和 Navicat for MySQL 的版本 10 开始,Windows 的企业版中包含了一个强大的报表生成器工具。本章将培训您开发技能,例如:
-
通过设计 GUI 中的查询来准备报表的数据集
-
使用向导设计报表
-
自定义报表设计
-
以各种格式打印到纸张或文件
与工具的初次接触
要访问 Navicat 的报表管理器,您只需要从左侧导航窗格中选择服务器和数据库,然后从 Navicat 主窗口的工具栏中单击大的报表按钮。或者,您可以从主菜单栏中选择查看 | 报表。在报表(管理器)的上下文中,您可以使用次要工具栏上的按钮创建、编辑或删除报表,或者在对象窗格的任何位置右键单击以调用弹出菜单,执行相同的操作,如下面的屏幕截图所示:

现在让我们继续设计一个简单的报表,基于sakila数据库中名为film_list的视图。
使用先前描述的方法创建一个新报表。应该会出现一个新的更大的Untitled窗口,默认情况下其Design选项卡处于活动状态。您还会注意到,这个窗口的用户界面可能是 Navicat 所有其他工具中最复杂的,因为 Navicat 的报表设计器是一个完整的报表生成应用程序。
在空白报表中,我们首先需要做的是选择一个数据集,用它来填充我们的报表。因此,我们需要切换到窗口的Data选项卡,以指定报表数据的来源。
使用查询向导准备数据
当我们首次打开Data选项卡时,会看到一个空白页面。从这里很难弄清楚接下来的步骤是什么。请参考下面的屏幕截图:
使用查询向导准备数据
在这一点上指定一些数据源有点令人沮丧,因为右键单击空白区域没有任何反应,Data选项卡下也没有工具栏。相反,您需要转到菜单栏的文件菜单,然后选择新建...。这将弹出一个小的模态对话框,要求您运行查询向导或查询设计器,如下面的屏幕截图所示:

这次我们将使用查询向导,因此请确保其图标被突出显示,然后单击确定。查询向导窗口显示两个可滚动的列表框(并排),一些程序员也称之为穿梭列表。左侧的列表框标题为可用表包含了我们sakila数据库中所有表和视图的名称,右侧的列表框标题为已选择的表指示了我们从可用表中选择的项目。
您需要点击并选择左侧列表中的一个或多个项目,然后按下>按钮后,它们将被转移到右侧的列表中。
出于我们简单教程的目的,我们只需要film_list视图。只需点击其名称并将其移动到名为已选择表的列表框中,然后点击下一步。查询向导窗口的屏幕截图如下所示:

您可以通过再次点击下一步来跳过下一个屏幕,因为我们想要选择我们已经选择的数据库视图中的所有字段,而这个选项在此屏幕上已经默认选择了。
在显示是否要向查询添加计算字段的屏幕上,我们将再次点击无计算,然后再次点击下一步。
现在,我们被提供了根据共同字段值将行分组的选项,我们也希望通过点击无分组来跳过,并再次点击下一步。
至于限制返回的行数屏幕,我们这里不需要限制,所以保持选择所有行,不改变其他任何内容,然后再次点击下一步。点击下一步后,显示的窗口将类似于下面的屏幕截图:

在这里,我们将被询问我们选择的数据集的行将如何排序。默认选项是自然顺序,这应该会将结果按照它们在视图中出现的顺序带到报告中(这很可能会按照 ID 对项目进行排序)。然而,我认为对于我们的报告,按类别和电影标题对它们进行排序是个好主意。因此选择设置顺序,然后将film_list.category移动到名为已选择字段的列表框中,然后对film_list.title做同样的操作,最后再次点击下一步。
最后一步将要求我们给我们的查询取一个我们选择的名称,在最后点击完成之前,我们可以指示我们是否返回到数据工作区、预览查询或修改查询设计的偏好。选择第一个选项,这也是默认选项。完成后,我们的数据工作区现在将包含film_list视图,如下面的屏幕截图所示:

现在,为了了解我们刚刚准备的数据集,点击film_list窗口工具栏上的第一个小按钮,这将弹出一个名为预览数据 - film_list的弹出窗口,显示我们刚刚创建的查询中的电影记录。您可能需要放大窗口,并通过将鼠标箭头悬停在列标题边界上,然后点击并拖动列到所需的长度来手动调整列的长度,如下面的屏幕截图所示:

当您完成预览查询结果后,只需点击此窗口右下角的确定。
工具栏上的其他七个按钮帮助我们打开报告的查询设计器窗口,该窗口允许您通过选择表和字段、定义过滤条件、对字段进行分组等来修改查询。
现在,您可以点击film_list表工具栏上的第二个按钮,调用查询设计器,并激活其表选项卡,通过连接它们来向查询中添加更多的表或视图。同样,第三个按钮将帮助您打开查询设计器,并激活其字段选项卡,以修改我们在第一次使用查询向导时指定的选定字段,如下面的屏幕截图所示:

查询设计器具有一些高级功能,这里只会简要提及,但不会详细介绍。
例如,计算选项卡是您可以在其中使用聚合函数定义一些动态字段,比如sum()、avg()、min()、max()和count(),或者您可以使用 MySQL 支持的任何 SQL 表达式作为函数。
另一个例子是搜索选项卡,您可以在其中定义一些预过滤条件,并将其添加到 SQL 查询作为WHERE条件。
为了这份简单的报告,我们现在将暂时离开查询设计器,并切换到报告生成器的设计选项卡,最终开始处理我们报告的布局。当我们回到设计选项卡时,我们会被提醒画布仍然被分成三个区域,作为页眉、详细信息和页脚(也如上方左侧面板中的报告树所示),但是在窗口的右侧,我们现在看到film_list在数据树下,film_list下方是film_list的字段。
设计报告
虽然我们可以通过点击和拖动右侧列出的字段到画布上并对齐它们来设计报告的布局,但这是没有向导正常设计报告的方式。这可能会变得非常复杂,所以我会向你展示一个更简单的方法,这将帮助你在很短的时间内完成报告。
转到文件菜单,选择新建...。一个名为新项目的对话框将弹出,并呈现给我们四个按钮作为图标,分别标有报告向导、报告、标签模板和交叉表向导。我承诺了更简单的方法,所以我们需要报告向导。它应该默认高亮显示,但请确保已选择。然后点击确定,如下截图所示:

现在,我们应该看到一个名为报告向导的模态窗口,它与其他应用程序中的向导非常相似,比如 Microsoft Access。使用这个向导非常直观,因为每个步骤都包括易于理解的解释和用户界面元素。在报告向导的第一个屏幕上,您将被要求选择数据集及其字段,这些字段需要出现在报告中。
对于这份报告,在选定字段中按照这个顺序添加FID、标题、类别、演员、评分和价格,然后点击下一步。
报告向导的下一个屏幕是我们可以指定选定数据可能被分类的组。从可用字段中点击类别,然后通过按下两个列表框之间的相应下箭头将其移动到组列表框中。当您这样做时,您还应该注意到报告布局预览将通过反映此更改而更新,如下截图所示:

点击下一步,继续到屏幕,我们将选择一个布局样式并选择(默认)页面打印方向。现在,因为我们选择了根据类别对报告输出进行分组,所以在这里我们呈现了共计六种布局样式选项。在其他情况下,我们只能选择两种布局——垂直(打印标签或卡片样式)或普通的表格。
我们在这种情况下拥有的布局样式选项是:
-
分步
-
块
-
大纲 1
-
大纲 2
-
左对齐 1
-
左对齐 2
![设计报告]()
至于方向选项,它们只包括纵向和横向,你应该对这些非常熟悉,因为你每天在其他程序的打印选项中都会用到。
对于我们的报告,我建议您选择左对齐 2作为布局样式,并将页面(打印)方向选项设置为纵向,这是默认设置。除非您渴望以后手动调整报告布局上的列宽,您应该保持调整字段宽度以使所有字段适合页面选项被选中。
完成后点击“下一步”。参考以下截图:

“报告向导”窗口将要求您从现成的报告设计或模板的选择列表中选择一个主题样式,您有以下选项:
-
粗体
-
休闲
-
紧凑
-
企业
-
正式
-
柔和灰
尽管在左侧设计预览中,每次点击选项时,它都会动态更新,让您对报告的外观有一个概念。多次尝试这个可能是个好主意,这样您就可以熟悉报告上反映的每种样式。
我个人最喜欢的是“休闲”,从本章开始的报告设计和预览的截图中您将看到。
当您点击“下一步”时,您会感激现在已经提供了创建报告所需的所有必要信息,并且您将被提供立即预览报告或直接修改报告设计的选择。
首先,在我们预览报告之前,让我们做一些最后的润色,所以在点击“完成”之前检查第二个选项。
当我们回到报告设计时,我们会高兴地发现画布不再是空白的。此外,“标题”、“页眉”、“详细”和“页脚”有点奇怪,因为它们都填满了我们之前在“报告向导”中定义的标签和数据占位符,但看起来仍然很小。
为了使报告看起来更“人性化”,我们可以从将标题更改为更自然的内容开始,比如Sakila 电影列表,并通过给列标题标签取一个更好的名字来修改它。例如,将其命名为“项目#”而不是FID(代表电影 ID)。参考以下截图:

您还需要调整列宽以有效利用空间。例如,您会特别注意到“评分”、“价格”和“类别”列的宽度都比必要的宽。因此,您可以将它们向右移动并减小宽度。然后,增加“演员”和“标题”的宽度。记得垂直对齐列名和数据字段(数据的占位符),它们分别放在页眉和详细区域。
此外,调整“类别”字段的外观是非常推荐的,这将极大地影响报告的外观和感觉,使其看起来更令人愉悦。
切换到预览选项卡
现在,是时候切换到“预览”选项卡,看看我们的报告和输出是什么样子了。
在报告预览中,您可以尝试工具栏上的按钮来调整您的查看设置,比如选择如何将报告数据调整到页面上,打印选项,以及在报告输出上进行文本搜索。您还可以使用小的箭头形状按钮在报告的页面之间导航。参考以下截图:

如果您还没有保存报告,现在是保存报告的好时机。Navicat 在保存报告时有一些特殊之处,不像它对待其他对象(如查询、事件和模型)那样。首先,要保存报告,您需要转到菜单栏并选择文件|保存。当您首次保存报告时,将提示您使用标准的另存为对话框。然后,指定一个带有文件扩展名.rtm的报告名称和文件系统中的位置,这表明您可以将报告存储在驱动器的任何位置。但是,一旦您单击对话框的保存按钮,Navicat 将提示您确认警告,警告您如果将报告保存在 Navicat 报告的默认目录之外,您的报告将无法在程序内的报告视图中看到(在这种情况下,您将不得不每次需要在 Navicat 中访问报告时使用打开文件对话框来定位报告)。参考以下截图:

即使您想将报告文件保存在文件的特定文件夹中,最好还是将其保存到默认位置,您可以通过以下路径在 Windows 资源管理器中访问:
\Users\<user_name>\Documents\Navicat\MySQL\servers\localhost\sakila
保存报告并退出报告设计器后,您需要在报告视图中右键单击其名称,并从弹出菜单中选择设计报告。直接双击已保存的报告会打开报告输出窗口(与设计者的预览选项卡非常相似),从中您可以打印报告或仅查看其内容。
您不仅可以将报告打印在纸上,还可以以多种格式输出,包括 PDF、Excel、文本和 HTML。您可以在打印对话框中即时指定此选项。
如果您的目标是基于文本的输出,您可能希望通过选择文件|打印到文件设置...并指定一些参数,如列分隔符和要包含在输出中的字段,来调整一些更多的设置。
Navicat 的报告构建和管理可以做的事情不仅限于本章讨论的内容,也不仅限于本介绍性书籍的范围之外。但是,您可以通过自己的实验和参考 Navicat 网站上可访问的 Navicat 官方手册来深入探索这些功能。在那里,您还可以找到更多的逐步和屏幕教程,这些教程可以教您如何创建更高级的报告,如发票、详细的订单摘要、销售统计、交叉表报告、邮寄标签,甚至相册。
摘要
在 Navicat 中构建报告包括两个主要阶段——准备数据和基于该数据设计报告。
在本章中,我们已经看到了 Navicat 的报告构建和管理工具,以及通过简单教程设计报告的基础知识,这也有助于熟悉一些可用于更高级目的的工具。
我们还看到了报告可以打印在纸上,也可以导出到各种流行的文件格式中。
附录 A. 额外提示和技巧
在本书中,我们已经介绍了 Navicat 中一些最有用和最常见的任务,但并非它所提供的一切。本附录旨在为您提供有关使用 Navicat 一些不太明显功能的一些额外提示和技巧,例如:
-
将您的设置复制到另一个 Navicat 用户或计算机
-
监视 MySQL 服务器并干预运行中的进程
-
强大的数据库搜索和发现新的查询设计方式
将设置从一台计算机转移到另一台计算机
在使用多台计算机(每台计算机都有 Navicat 的副本)的情况下,您可能希望将您的设置、连接配置、自定义查询、数据模型图表甚至批处理作业复制到您使用的所有计算机上。即使不是这种情况,您也可以使用这里的提示来备份 Navicat 设置,以便在重新设置计算机时恢复数据。
在 Mac 上转移设置
在 Mac 上,Navicat 中的所有设置、连接配置、保存的查询和模型都存储在两个文件夹中,位于/Users/<user_name>/Library/Application Support/中。您可以从首选项窗口中自定义数据模型路径(只需从苹果菜单旁边的应用程序菜单中选择首选项...,然后转到打开窗口中的文件路径选项卡)。Application Support下的一个文件夹名为PremiumSoft CyberTech,另一个是Navicat Premium或Navicat for MySQL,具体取决于您使用的版本和版本。
在 Finder 中,从菜单栏中选择前往 | 前往文件夹...(或同时按+和G键),然后输入/Users/<user_name>/Library/Application Support/,然后按前往按钮即可到达。最后,将这两个文件夹复制到目标机器或用户的相同文件夹层次结构中。
这将把所有设置、连接配置和保存的模型图表复制到目标机器上。在传输过程中,目标机器或用户不应该运行 Navicat。参考以下截图:

在 Windows 上转移设置
某些用户数据,如查询和数据模型图表,以及 Navicat 的报告(仅限 Windows 版本)默认存储在用户的Documents文件夹中的Navicat目录内。其他设置和连接配置存储在 Windows 版本的注册表中。
您可以通过在 Navicat 的主菜单栏中选择文件 | 导出连接...,或者右键单击左侧窗格中的连接定义(数据库服务器名称)并选择相同的菜单项来导出连接设置。然后在目标系统(或用户帐户)上,您可以重复相同的步骤,只是这次选择导入连接...并通过打开文件对话框指定先前导出的文件(及其路径)。
在 Windows 7 中,用户文档文件夹的完整路径可能是C:\Users\<user_name>\Documents\Navicat。
但是,您可以通过转到工具 | 选项 | 杂项来自定义默认目录(和路径)。
您可以通过简单地将整个Navicat文件夹复制到目标用户的Documents文件夹来将查询和数据模型图表转移到另一台 Windows PC。在执行此转移时,请确保目标机器上没有运行 Navicat。请参考以下截图:

监视 MySQL 服务器
使用 Navicat,您可以监视数据库服务器以查看运行中的进程、服务器的当前状态以及数据库的属性,如变量。您可以实时获取所有服务器的此信息,以单个、底层视图的形式呈现。
服务器监视器可以直接从 Navicat 的主菜单中的工具菜单中访问,它有三个主要视图,分为 Windows 版本的选项卡和 Mac 版本的主工具栏按钮。参考以下截图:

进程列表
这是您在窗口右侧的复选框列表中选择的所有服务器上运行的进程或任务。您在此屏幕上获得的信息可以列举如下:
-
连接设置中定义的服务器名称
-
在服务器上运行的进程的ID
-
登录到服务器的用户
-
用户连接的主机或 IP
-
当前正在使用的数据库名称
-
用户发出的最后一个命令
-
进程的时间,状态和信息
只需点击列表中的进程以突出显示它,然后点击结束进程按钮,就可以强制结束一个进程。
您还会注意到工具栏上的其他按钮,它们提供了自动或手动刷新视图的选项。一个不那么明显的技巧是,在自动刷新的情况下,您可以通过从编辑菜单中选择设置刷新速率...来更改1秒默认的间隔为您喜欢的任何值。
变量
在此选项卡下,您可以获取所有服务器变量,如character_set_server和date_format,以及按字母顺序列出的这些变量的值。这些信息通常是通过在 MySQL 服务器控制台中执行SHOW VARIABLES命令获得的。
只需选择一行,然后单击包含变量值的单元格右端的方形按钮,就可以在飞行中更改值。(这是一个高级用户真正知道自己在做什么的功能。)
状态
状态选项卡列出了通过发出SHOW STATUS命令从 MySQL 服务器中检索到的相同标准信息。
这会输出一些长的,只读的信息,只有高级用户和 DBA 能理解。
揭示 Navicat 的隐藏搜索功能
您可以使用 Navicat 来查找符合某些条件的一个或多个数据库表记录。在 Navicat 主窗口的左侧窗格中选择一个数据库或模式,右键单击它,您将在打开的弹出菜单项中看到在数据库中查找...命令。执行此命令将显示一个弹出窗口,让您输入搜索字符串和匹配标准(如精确或包含,甚至评估正则表达式)。
例如,选择我们在第二章中创建的our_first_db,与数据库一起工作,右键单击它,选择在数据库中查找...。然后,在搜索框中输入manager,将匹配标准保留为包含,然后单击查找按钮。
搜索应该产生 12 个匹配项,结果应该总结在搜索框下方。这个功能很酷的地方在于,当你双击其中一个结果时,一个新的查询窗口将打开,其中包含从我们的搜索条件转换而来的生成的 SQL 查询,该查询会自动执行一次,并显示结果。参考以下截图:

摘要
本附录为我们提供了一些额外的技巧和窍门,比如如何备份或转移我们的 Navicat 设置。更重要的是?我们已经揭示了一些 Navicat 的隐藏功能(比如服务器监视器),它不仅可以为我们提供有关运行进程的详细信息,如客户端用户信息和连接用户运行的命令类型,还可以完全控制手动终止进程。我们还看到了如何使用这个强大的工具获取其他详细信息,比如服务器变量和服务器状态。
最后,我们看到了一个搜索功能,它使我们能够从包含搜索字符串的任何表中检索特定记录,并自动生成一个 SQL 查询,这个查询可以被重复使用来执行相同的搜索,作为标准的 Navicat 查询。











浙公网安备 33010602011771号