# 架构比较和迁移

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

> **TL;DR**
> 在   数据库  工具窗口中，选择两个数据库对象，然后按 `Ctrl+D` (Windows), `⌘ D` (macOS), `⌘ D` (IntelliJ IDEA Classic (macOS)), `⌘ D` (macOS System Shortcuts), `Ctrl+D` (XWin), `Ctrl+D` (GNOME), `Ctrl+D` (KDE), `Ctrl+D` (Emacs), `Ctrl+D` (Sublime Text), `⌘ D` (Sublime Text (macOS)), `Ctrl+D` (Visual Studio), `⌘ D` (Visual Studio (macOS)), `Ctrl+D` (NetBeans), `Ctrl+D` (Eclipse), `⌘ D` (Eclipse (macOS))。
>
>
>
> 有关数据比较功能，请参阅 [比较数据库对象的数据](compare-data.html) 主题。

Procedure: 启用 数据库工具和 SQL 插件

此功能依赖于 数据库工具和 SQL 插件，该插件默认情况下在 IntelliJ IDEA 中绑定并启用。 如果相关功能不可用，请确保您没有禁用插件。

> **Note:**
> 没有 Ultimate 订阅时，数据库工具和 SQL 的功能支持在 IntelliJ IDEA 中受限。

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `插件` 。

2. 找到  数据库工具和 SQL  插件并点击   启用  。

在 IntelliJ IDEA，您可以比较两个相同类型的数据库对象。 例如，您可以比较两个 schema、两个表或两个例程。 可以在不同的服务器上托管包含对象的数据库。 IntelliJ IDEA 向您显示这两个对象结构的差异，在   迁移  对话框中。

Migration  是将结构和更改从一个对象转移到另一个对象（例如，从一个 schema 转移到另一个 schema ）的过程。 在 IntelliJ IDEA 中，这些对象被称为   来源  和   目标  。 迁移脚本已生成，以使   目标   等于   来源  。 但是您可以修改脚本以满足您的需求。

![在迁移对话框中比较结构](https://resources.jetbrains.com/help/img/idea/2026.3/db_schema_migration_dialog.png)

对于更改，IntelliJ IDEA 使用以下颜色编码。

|  颜色  |  描述  |
| --- | --- |
|  ![项目是新的](https://resources.jetbrains.com/help/img/idea/2026.3/db_diff_items_added.png)  |  成功迁移后，将在   来源  中添加的对象将在   目标  中创建。  |
|  ![各项不同](https://resources.jetbrains.com/help/img/idea/2026.3/db_diff_items_modified.png)  |  需修改的对象将在   目标  中被更改。  |
|  ![要删除的项目](https://resources.jetbrains.com/help/img/idea/2026.3/db_diff_items_to_be_deleted.png)  |  在   来源   删除的对象将在迁移成功的情况下，在   目标   中被删除。  |

请参阅 [参考部分](#controls_of_the_migration_dialog)中的对话框控件描述。

## 架构比较

Procedure: 显示对象之间的差异

1. 在   数据库   工具窗口中，选择两个相同类型的对象。 例如，两个架构。

2. 右键点击选择并选择   将结构与以下对象比较…  。 或者按 `Ctrl+D` (Windows), `⌘ D` (macOS), `⌘ D` (IntelliJ IDEA Classic (macOS)), `⌘ D` (macOS System Shortcuts), `Ctrl+D` (XWin), `Ctrl+D` (GNOME), `Ctrl+D` (KDE), `Ctrl+D` (Emacs), `Ctrl+D` (Sublime Text), `⌘ D` (Sublime Text (macOS)), `Ctrl+D` (Visual Studio), `⌘ D` (Visual Studio (macOS)), `Ctrl+D` (NetBeans), `Ctrl+D` (Eclipse), `⌘ D` (Eclipse (macOS))。

![迁移对话框中对象之间的差异](https://resources.jetbrains.com/help/img/idea/2026.3/db_compare_two_schemas.png)

Procedure: 以表格形式显示更改之间的差异

1. 在   迁移   对话框中，点击   来源   或   目标   字段中的某个项。

2. 点击   对象属性差异  选项卡。

[Video](https://resources.jetbrains.com/help/img/idea/2026.3/db_differences_between_object_properties.mp4)

Procedure: 显示 DDL 变更之间的差异

1. 在   迁移   对话框中，点击   来源   或   目标   字段中的某个项。

2. 点击   DDL 差异  选项卡。

![对象属性之间的差异](https://resources.jetbrains.com/help/img/idea/2026.3/db_differences_between_object_properties_in_ddl.png)

Procedure: 显示相同项目

* 要显示在   来源  和   目标  对象中相同的所有项，请选中   显示相同项  复选框。

已启用:

![已启用“显示相同记录”选项。](https://resources.jetbrains.com/help/img/idea/2026.3/db_show_identical_records_on.png)

已禁用:

![显示相同记录已禁用](https://resources.jetbrains.com/help/img/idea/2026.3/db_show_identical_records_off.png)

## 架构迁移

Procedure: 在对象之间迁移更改

1. 在   数据库   工具窗口中，选择两个相同类型的对象。 例如，两个架构。

2. 右键点击所选内容，然后在上下文菜单中选择   将结构与以下对象比较…  。 或者按 `Ctrl+D` (Windows), `⌘ D` (macOS), `⌘ D` (IntelliJ IDEA Classic (macOS)), `⌘ D` (macOS System Shortcuts), `Ctrl+D` (XWin), `Ctrl+D` (GNOME), `Ctrl+D` (KDE), `Ctrl+D` (Emacs), `Ctrl+D` (Sublime Text), `⌘ D` (Sublime Text (macOS)), `Ctrl+D` (Visual Studio), `⌘ D` (Visual Studio (macOS)), `Ctrl+D` (NetBeans), `Ctrl+D` (Eclipse), `⌘ D` (Eclipse (macOS))。

一组可用于编写迁移脚本的语句将在   脚本预览  标签中生成。

3. 请在   脚本预览  选项卡中验证迁移脚本是否正确。

4. 点击   执行  。 或者，单击   在控制台中打开查询   以在 查询控制台 中打开所有脚本。

Procedure: 选择要迁移的变更

* 要排除某个更改，请点击更改旁边的复选框。

* 若要排除所有更改，请选中   目标   标签旁边的复选框。

* 要包含所有被排除的更改，请点击   目标   标签旁边的复选框。

[Video](https://resources.jetbrains.com/help/img/idea/2026.3/db_select_changes_to_migrate.mp4)

## 迁移对话框的控件

|  图标  |  工具提示和快捷键  |  描述  |
| --- | --- | --- |
|  ![全部展开](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.expandAll.svg)  |    全部展开    |  展开所有折叠的节点。  |
|  ![全部收起](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.collapseAll.svg)  |    全部收起    |  折叠所有展开的节点。  |
|  ![交换](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.actions.swapPanels.svg)  |    交换    |  将   来源   和   目标   面板互换。  |
|  ![选项](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.settings.svg)  |    选项    |      * 使用架构名称限定对象 ：设置何时使用架构名称限定数据库对象。 * 从不 ：不添加架构名称。 * 始终 ：为所有对象名称添加架构名称。 * 自动 ：当所有对象属于同一架构或该架构为当前架构时省略架构名称。 在大多数情况下，当前架构是用户选择用于登录的架构。 此选项会影响生成的代码，不会影响直接从服务器接收的代码。    * 放置约束 ：设置约束的放置位置。    * 允许重新创建对象 ：如果无法更改，则重新创建对象。    * 使用替代（自动生成的）名称 ：使用作者省略且由服务器端自动生成的名称。    * 忽略标识符大小写的修改 ：忽略标识符大小写更改。    * 生成禁用子句或语句 ：为当前已禁用的元素生成禁用代码。    * 忽略所有者 ：在生成的脚本中忽略对象所有者。    * 跳过授权 ：不为权限生成授权代码。    * 在用户定义中显示授权 ：为所有可访问对象生成授权。    * 忽略顺序 ：忽略列顺序。    * 重新生成数据库提供的代码 ：重新生成由数据库作为源代码一部分提供的属性定义。    * 重新格式化生成的代码 ：使用当前代码样式配置文件重新设置生成代码的格式。 此选项仅影响生成的代码，不会影响直接从服务器接收的代码。    * 忽略扩展成员 ：忽略源自扩展的对象。    * 忽略隐式对象 ：忽略自动生成的对象。 例如，外键的索引、在 Microsoft SQL 服务器 中用于列默认值的 `DEFAULT CONSTRAINT` 。    * 忽略源代码 ：忽略函数或过程的主体。 对象是根据它们的种类和身份（例如函数签名）进行匹配的。 如果两者的种类和标识相同，则认为两个函数是相等的。 然后，差异查看器会考虑此选项——是否忽略函数主体。    |
|  ![已选择](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.com.intellij.ide.ui.laf.icons.intellij.checkBoxSelectedDisabled.svg)  |    包含更改    |  应用所选更改。  |
|  |    显示相同项    |  显示所有相同的项。  |

### DDL Diff 控制

|  条目  |  工具提示和快捷键  |  描述  |
| --- | --- | --- |
|  ![“上一个差异”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.up.svg)/ ![“下一个差异”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.down.svg)  |       上一个差异   /   下一个差异         `Shift+F7` (Windows), `⇧ F7` (macOS), `⇧ F7` (IntelliJ IDEA Classic (macOS)), `⌘ [` (macOS System Shortcuts), `Shift+F7` (XWin), `Shift+F7` (GNOME), `Shift+F7` (KDE), `Shift+F7` (Emacs), `Shift+F7` (Sublime Text), `⇧ F7` (Sublime Text (macOS)), `Shift+F7` (Visual Studio), `⇧ F7` (Visual Studio (macOS)), `Shift+F7` (NetBeans), `Shift+F7` (Eclipse), `⇧ F7` (Eclipse (macOS)) / `F7` (Windows), `F7` (macOS), `F7` (IntelliJ IDEA Classic (macOS)), `⌘ ]` (macOS System Shortcuts), `F7` (XWin), `F7` (GNOME), `F7` (KDE), `F7` (Emacs), `F7` (Sublime Text), `F7` (Sublime Text (macOS)), `F7` (Visual Studio), `F7` (Visual Studio (macOS)), `F7` (NetBeans), `Ctrl+F7` (Eclipse), `⌃ F7` (Eclipse (macOS))     |     跳转到下一个或上一个差异。     |
|  ![“跳转到源”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.edit.svg)  |       跳转到源         `F4` (Windows), `⌘ ↓` (macOS), `F4` (IntelliJ IDEA Classic (macOS)), `F4` (macOS System Shortcuts), `F4` (XWin), `F4` (GNOME), `F4` (KDE), `F4` (Emacs), `F4` (Sublime Text), `F4` (Sublime Text (macOS)), `F4` (Visual Studio), `⌘ ↓` (Visual Studio (macOS)), `F4` (NetBeans), `F12` (Eclipse), `F3` (Eclipse (macOS))     |     在编辑器的活动窗格中打开所选对象的定义。 文本光标放置在与   差异查看器   中相同的位置。     |
|  |    并排查看器    |     请选择查看模式：   并排查看器  或   统一查看器  。 并排模式包含两个面板，统一模式包含一个面板。     |
|  |    空白字符    |     定义差异查看器应如何处理空格。        * 无 ：空格很重要，并且所有差异都会高亮显示。 默认选中此选项。    * 修整空白 ：如果空格出现在行尾和行首，则将其去除（ `("\t", " ")` ）。 * 如果两行仅在行尾空格上存在差异，则这两行会被视为相同。 * 如果两行不同，则在 [按单词](#highlight) 模式下不会高亮显示行尾空格。    * 忽略空白 ：空格不重要，无论在源代码中的位置如何。    * 忽略空格和空行 ：忽略空格和空行。 以下实体将被忽略： * 所有空白字符（如 忽略空白 选项） * 所有仅由空格组成的新增或删除行 * 所有拆分或合并行且不更改非空白部分的更改。 例如，在此模式下， `a b c` 和 `a \n b c` 之间的差异不会被高亮显示。    |
|  |    高亮显示模式    |     选择差异的高亮显示方式。       可用选项包括：        * 单词 ：已修改的单词将被高亮显示    * 行数 ：已修改的行将被高亮显示    * 拆分更改 ：如果选择此选项，大的更改会被拆分成较小的更改。 例如， `A \n B` 和 `A X \n B X` 将被视为两个更改，而不是一个。    * 高亮显示符号 ：已修改的符号将被高亮显示    * 无 ：如果选中此选项，则完全不会高亮显示差异。 与大幅修改过的对象一起工作时，请使用 无 选项。 在此类情况下，高亮显示可能会在审阅期间带来额外困难。    |
|  ![同步滚动](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.actions.synchronizeScrolling.svg)  |    同步滚动    |  在左窗格和右窗格中同步滚动。  |
|  ![设置按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.settings.svg)  |    设置    |     请选择您希望在比较过程中忽略的选项。        * 显示空白字符 ：在差异查看器中显示空白为点。    * 显示行号 ：在差异查看器中显示行号。    * 显示缩进参考线 ：在差异查看器中显示垂直线以指示缩进的位置。    * 自动换行 ：在调整对话框大小时，换行代码行。    * 高亮显示级别 ：允许您在差异查看器中选择 [高亮级别](disabling-and-enabling-inspections.html#change-highlighting-level-for-file)。    * 注解 ： [注释](investigate-changes.html#annotate_blame)更改。 > **Tip:** > 此选项仅适用于受版本控制的文件。    |
|  ![帮助图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.actions.help.svg)  |     帮助    `F1` (Windows), `⌘ ⇧ F1` (macOS), `F1` (IntelliJ IDEA Classic (macOS)), `⌘ ⇧ F1` (macOS System Shortcuts), `F1` (XWin), `F1` (GNOME), `F1` (KDE), `F1` (Emacs), `F1` (Sublime Text), `⌘ ⇧ F1` (Sublime Text (macOS)), `F1` (Visual Studio), `F1` (Visual Studio (macOS)), `F1` (NetBeans), `F1` (Eclipse), `⌘ ⇧ F1` (Eclipse (macOS))  |  打开浏览器并显示相应的帮助页面。  |

