# 外键

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

外键关系指定表之间的关系，并表示表之间的关系。 IntelliJ IDEA 可识别数据库架构中的外键关系，并使用它们来构造  `JOIN`  子句。 您可以在自动完成列表、数据导航和图表中看到这些关系。

在 IntelliJ IDEA 中，您可以使用显式外键或创建 [虚拟外键](virtual-foreign-keys.html)。

外键（ ![外键](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database-plugin.icons.expui.blueKey.svg)）可以在   数据库  工具窗口中找到。

* 有关其他节点和对象图标的参考信息，请参阅 [数据库工具窗口](database-tool-window.html) 主题中的 [数据源及其元素](database-tool-window.html#icons-for-data-sources-and-their-elements) 章节。

* 关于表列图标，请参阅 [栏目可能的图标组合](database-tool-window.html#possible-icon-combinations-for-columns) 章节。

* 使用 [视图选项](database-tool-window.html#view_options) 菜单中的树对象视图选项隐藏、排序、过滤和分组树对象。

![数据库 中的外键](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database_object_foreign_key.png)

一个  foreign key 是一个表中的字段或字段集合，用于引用另一个表中的primary key。 当您创建或修改表时，您可以清楚地定义这些键：

```SQL
CREATE TABLE visitor (
        id int NOT NULL,
        activity_id int NOT NULL,
        PRIMARY KEY (id),
        FOREIGN KEY (activity_id) REFERENCES activity(activity_id)
        );
```

包含外键的表是子表。 包含候选键的表是被引用的或目标表。 如果您的数据库包含显式外键关系，IntelliJ IDEA 会自动在自动补全、数据导航和图表中使用它们。

在以下示例中，  `activity.activity_id`  是主键，而  `visitor.activity_id`  是外键。

![显式外键](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_explicit_foreign_key.svg)

Procedure: 创建外键

1. 在   数据库   工具窗口中，展开数据源树，直到表节点。

2. 右键点击表节点并选择  `新建 | 外键` 。

3. 在打开的   修改  对话框中，在   名称  字段中输入您的外键名称。

4. 在   目标表  窗格中，指定目标表的名称。

5. 在   列   窗格中，点击   添加   按钮 ( !["添加"按钮](https://resources.jetbrains.com.cn/help/img/idea/2026.3/app.expui.general.add.svg))。

6. 在   列名   字段中，指定子表中列的名称。

7. 在   目标名称   字段中，指定目标表中列的名称。

8. 在   预览   窗格中，您可以查看和更改生成的 SQL 代码。

9. 点击   OK  以添加您的外键。

> **Note:**
> 可用字段和选项取决于 DBMS。 有关更多详细信息，请参阅 DBMS 的官方文档。

![创建外键](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_create_foreign_key.png)

## 效率提示

Procedure: 修改生成的索引和键名称的模板

创建索引以及主键和外键约束时，将根据相应模板生成其默认名称。 例如，对于主键，模板是  `{table}_{columns}_pk` 。

* 要查看并修改这些模板，请打开设置 `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)) 并转到  `编辑器 | 代码样式 | SQL | 常规` 。 点击   代码生成   选项卡。

模板可以包含变量和文本。 生成名称时，指定的文本将按字面插入。 例如，当您在  `actor`  表中应用  `{table}_pk`  模板时，生成的主键名称将为  `actor_pk` 。

若要查看有关变量及其用法的信息，请点击某个字段并按 `Ctrl+Q` (Windows), `F1` (macOS), `⌃ J` (IntelliJ IDEA Classic (macOS)), `⌘ I` (macOS System Shortcuts), `Ctrl+Q` (XWin), `Ctrl+Q` (GNOME), `Ctrl+Q` (KDE), `Ctrl+Q` (Emacs), `Ctrl+Q` (Sublime Text), `Ctrl+Q` (Sublime Text (macOS)), `Ctrl+K, I` (Visual Studio), `⌘ K, I` (Visual Studio (macOS)), `Ctrl+Q` (NetBeans), `Alt+Middle-Click` (Eclipse), `⌥ Middle-Click` (Eclipse (macOS))。

`{unique?u:}`  会检查索引是否唯一，并插入相应的字符序列。 如果索引是唯一的，模板会使用位于  `?`  与  `:`  之间指定的字符序列来生成名称。 对于  `{unique?u:}`  模板，则为  `u` 。 如果索引不唯一，则插入  `:`  与  `}`  之间的字符序列。 对于  `{unique?u:}`  模板，则为空。

示例

您有一个  `persons`  表，其中包含列  `FirstName`  和  `LastName` 。  `{table}_{columns}_{unique?u:}index`  模板会为非唯一索引生成以下名称：  `persons_FirstName_LastName_index` 。

![修改生成的索引和键名称的模板](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_modify_templates_for_indexes_and_keys.png)

Procedure: 在相关行之间导航

* 在表中右键点击某一行或单元格，然后选择  `转到 | 相关行` 。

或者，选择一个单元格，然后点击快速操作弹出工具栏中出现的 ![相关行图标](https://resources.jetbrains.com.cn/help/img/idea/2026.3/database-plugin.icons.expui.goToTable.svg)   相关行  。

![被引用数据与引用数据](https://resources.jetbrains.com.cn/help/img/idea/2026.3/db_referencing_referenced_data.png)

在数据编辑器中，您可以选择多个值并导航到相关数据。

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

有关操作行为选项的更多信息，请参阅 [高级设置](advanced-settings.html#related_rows_action_behavior)。

> **Tip:**
> 此外，您还可以观看 [在 youtube.com 上的通过外键导航视频](https://www.youtube.com/watch?v=U5SOD-eeK50&t=1052s) 以查看另一个示例。

### 参考

[创建和修改对话框](create-and-modify-dialogs.html#objects_editor) [栏目可能的图标组合](database-tool-window.html#possible-icon-combinations-for-columns) [数据源及其元素](database-tool-window.html#icons-for-data-sources-and-their-elements)

### 相关

[数据库图表](creating-diagrams.html)

### 工具 Windows

[数据库工具窗口](database-tool-window.html)

### 导航

### 语言和框架特定指南

[数据库工具和 SQL](relational-databases.html)

