创建复合数据库

组合数据库使用 Cypher® 管理命令进行管理。请注意,无法修改组合数据库的访问选项或数据库拓扑,因为这些属性是从其组成的底层数据库继承而来的。有关修改访问选项的信息,请参阅 更改数据库访问模式。有关数据库拓扑的信息,请参阅 在集群中创建数据库

驱动程序和客户端应用程序连接组合数据库的方式与连接标准数据库相同。有关更多信息,请参阅不同 Neo4j 驱动程序和应用程序的手册。

创建组合数据库

可以使用 CREATE COMPOSITE DATABASE 创建组合数据库。

组合数据库名称遵循与 标准数据库 相同的规则。一个区别是,在 Cypher 5 中,如果不使用反引号包裹名称而直接使用点号的语法是不可用的。在 Cypher 5 中使用组合数据库时,点号和连字符都需要用反引号包裹。

不建议在组合数据库名称中使用点号(.)。这是因为难以确定点号是组合数据库名称的一部分,还是组合数据库中数据库别名的分隔符。

查询
CREATE COMPOSITE DATABASE inventory

当创建好组合数据库后,它会显示在 SHOW DATABASES 命令提供的列表中。

查询
SHOW DATABASES
结果
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name        | type        | aliases            | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents       |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "inventory" | "composite" | []                 | "read-only"  | "localhost:7687" | NULL      | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []                 |
| "library"   | "composite" | []                 | "read-only"  | "localhost:7687" | NULL      | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | ["library.sci-fi"] |
| "neo4j"     | "standard"  | []                 | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | TRUE    | TRUE  | []                 |
| "sci-fi"    | "standard"  | ["library.sci-fi"] | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []                 |
| "system"    | "system"    | []                 | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []                 |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

有关该命令返回的列的完整说明,以及如何按特定列对结果进行排序,请参阅 列出数据库

要在组合数据库中创建数据库别名,请将该组合数据库作为别名的命名空间。有关在组合数据库中创建别名的信息,请参阅 管理组合数据库中的别名

使用 IF NOT EXISTSOR REPLACE 创建组合数据库

CREATE COMPOSITE DATABASE 命令是可选幂等的,默认行为是在数据库已存在时报错并失败。有两种方法可以规避此行为。

首先,在命令后附加 IF NOT EXISTS 可确保如果给定名称的数据库或数据库别名已存在,则不会返回错误,也不会执行任何操作。

查询
CREATE COMPOSITE DATABASE inventory IF NOT EXISTS

由于名为 inventory 的组合数据库已经存在,因此这将不会创建新的组合数据库。

其次,在命令中添加 OR REPLACE 将导致删除任何现有的数据库并创建一个新的数据库。

查询
CREATE OR REPLACE COMPOSITE DATABASE inventory

这等同于先运行 DROP DATABASE inventory IF EXISTS,然后再运行 CREATE COMPOSITE DATABASE inventory

IF NOT EXISTSOR REPLACE 的行为适用于标准数据库和组合数据库(例如,组合数据库可以替换标准数据库或其他组合数据库)。IF NOT EXISTS 还会检测是否存在具有给定名称的数据库别名,如果存在,则直接跳过而不报错。

这些命令中的 IF NOT EXISTSOR REPLACE 部分不能同时使用。

设置组合数据库的默认 Cypher 版本

您可以在创建组合数据库时为其设置默认 Cypher 版本。如果未指定,组合数据库的默认语言将设置为 DBMS 的默认语言。例如:

查询
CREATE COMPOSITE DATABASE inventory DEFAULT LANGUAGE CYPHER 5

此命令创建一个名为 inventory 的组合数据库,并将默认语言设置为 Cypher 5。

要查看 DBMS 中每个数据库的默认 Cypher 版本,请使用 YIELD 子句运行 SHOW DATABASES 命令,并指定 defaultLanguage 列。例如

查询
SHOW DATABASES YIELD name, defaultLanguage
表 1. 结果
名称 (name) defaultLanguage

"neo4j"

"CYPHER 25"

"library"

"CYPHER 5"

"inventory"

"CYPHER 5"

"sci-fi"

"CYPHER 5"

"system"

"CYPHER 25"

行:5

有关配置 Cypher 版本的其他选项的更多信息,请参阅 配置 Cypher 默认版本

将默认语言设置为 CYPHER 5 可确保在该数据库上运行的所有查询都将使用 Neo4j 2025.06 版本发布时所具备的 Cypher 5 版本(除非您在查询前加上 CYPHER 25,这会覆盖此默认设置)。2025.06 版本之后引入的任何更改都不会影响查询的语义。