9.5.1 数据库同步

在模型、数据库和 SQL 文件之间同步数据。这三种类型可以是目标(destination)、源或两者。您还可以选择或取消选择单个对象并在同步期间修改它们的方向。例如,您可以将表从一个模型同步到您的数据库,将其他表从您的数据库同步到您的模型,并在同一个同步过程中跳过一些表。

笔记

请注意,随着时间的推移,会引入向后不兼容的 MySQL 语法更改,因此,根据您的需要设置默认目标 MySQL 版本建模首选项非常重要。例如,从 MySQL 5.7 目标导出结果在针对 MySQL 5.6 执行时可能会产生无效语法。另见 第 3.2.4 节,“建模首选项”

首先,从数据库导航菜单中选择与任何源同步,如下图所示。或者,选择 同步模型以打开默认为模型的同一向导。必须选择模型或 EER 图,这些同步选项才会出现在 数据库导航菜单下。

图 9.56 启动同步向导

内容在周围的文字中描述。

警告

因为 MySQL 数据库对应于数据目录中的目录,所以您必须考虑数据库、表和触发器名称的区分大小写,它们遵循操作系统的底层文件系统的区分大小写规则。将模型与大小写不同的对象同步可能会导致 MySQL WorkbenchDROP在将其重新创建为小写之前为该对象生成一条语句。有关详细信息,请参阅 标识符区分大小写

解决方法包括使用一致的约定,其中最可移植的代码使用小写的数据库和表名称。或者临时解决方法是DROP SCHEMA IF EXISTS从生成的查询中删除该行。

MySQL Workbench 可以控制要同步的对象,以及每个对象的同步方向。同步选项包括:

  • 指定要同步的所有或特定表和对象。

  • 同步模型和实时数据库,或只更新其中之一(单向或双向)。

  • 可选择从 SQL 脚本文件更新或更新到 SQL 脚本文件。

  • 您可以生成一个ALTER 脚本文件 ,而不是执行同步, 以便稍后执行适当的更新。

  • 通过选择每个单独对象的方向或配置要忽略的特定对象来微调同步的执行方式。

数据库菜单 中有两个类似的数据库同步向导。更简单的 同步模型向导和更灵活的 与任何源同步向导。除非另有说明,否则以下描述适用于两者。

同步模型(与数据库)

要启动该向导,请打开一个模型并 从主菜单中选择数据库同步模型。按照步骤顺序进行操作,直到到达Select Changes to Apply 步骤,如下图所示。

图 9.57 模型和数据库差异

内容在周围的文字中描述。

在前面的示例中,实时数据库和模型都有 movies shows表。在 MySQL Workbench 中,educational已在模型中创建了一个附加表 ,但它在实时数据库中缺少对等表。此外,friends存在于实时数据库中,但不在模型中。默认情况下,操作会将数据库与模型同步,因此在此示例中, educational表将添加到源中,friends表将从源中删除。

如 GUI 中所述,双击箭头将在Update ModelIgnoreUpdate Source操作之间交替。您也可以选择一行并单击三个操作按钮之一。另请注意,单击一行将显示关联的 SQL 语句,如上图所示。

下图显示了如何更改同步方向的示例。

图 9.58 控制同步方向

内容在周围的文字中描述。

在这种情况下,同步方向已更改,而不是friends从活动数据库中删除的默认操作,它将合并到 MySQL Workbench 模型中。和以前一样,educational表将添加到实时(源)数据库中。

可用的三个动作是:

  • 更新模型:使选定的更改从实时数据库应用到模型。

  • Ignore:导致更改被忽略。这些更改不会发生同步。这用被划掉的双箭头表示。

  • 更新源:使更改仅应用于实时数据库。

单击表映射提供了额外的映射选项,如下图所示。

图 9.59 表映射

内容在周围的文字中描述。

单击Next显示执行配置模型和实时数据库(源)同步的 SQL 语句。下图显示了示例预览。

图 9.60 预览同步 SQL 语句

内容在周围的文字中描述。

您现在可以将 SQL 语句保存到文件或剪贴板,或执行 SQL 语句。如果您选择在 MySQL Workbench 中执行更改,那么您可以选择跳过“数据库更改”,以便仅更改您的模型。

与任何来源同步

要启动该向导,请打开一个模型并选择 数据库,然后从主菜单中选择与任何源同步。这些步骤类似于同步模型向导,但具有创建 SQL 脚本文件和/或使用 SQL 脚本文件的附加选项。下图显示了选择源设置。

图 9.61 与任何源同步:选择源

内容在周围的文字中描述。

请注意如何更改源和目​​标类型。接下来的步骤取决于这些源和目标类型,同步模型描述了该向导的基本功能。