创建数据库企业版Aura 不可用
Neo4j 支持在同一个 DBMS 中管理多个数据库。这些数据库的元数据(包括关联的安全模型)保存在一个名为 system 的特殊数据库中。所有多数据库管理命令都必须针对 system 数据库运行。当通过 Bolt 连接到 DBMS 时,这些管理命令会自动路由到 system 数据库。
您可以使用 Cypher 命令 CREATE DATABASE 创建数据库。数据库的初始内容取决于服务器的状态以及提供给命令的选项。如果未提供额外选项,CREATE DATABASE 将尝试原地挂载任何预先存在的存储文件(例如,还原备份的结果)。如果没有可用的预先存在的存储文件,它将创建一个空数据库。
|
数据库名称需遵守 数据库命名 部分中指定的规则。不建议在数据库名称中使用点( |
如果未指定 db.format 设置,则 block 是所有新创建数据库的默认格式。
如果您想更改它,可以在 neo4j.conf 文件中为 db.format 配置设置一个新值。
或者,您可以使用 CREATE DATABASE databasename OPTIONS {storeFormat: 'the-new-format'} 命令设置新数据库的存储格式。但是,如果存储是通过 seedURI、existingDataSeedServer 或 existingDataSeedInstance 进行播种的,或者如果该命令用于挂载磁盘上已经存在的预存存储文件,它们将使用其当前的存储格式,而不会进行任何更改。
有关 Neo4j 中可用数据库存储格式的更多详细信息,请参阅 存储格式。
语法
| 命令 | 语法 |
|---|---|
|
|
|
|
| 命令 | 语法 |
|---|---|
|
|
|
|
选项
CREATE DATABASE 命令可以包含一个选项映射,例如 OPTIONS {key: 'value'}。
| 键 | 值 | 描述 |
|---|---|---|
|
|
控制系统在创建数据库时如何处理磁盘上的现有数据。目前,这仅支持 |
|
集群服务器的 ID |
定义使用哪个服务器来播种所创建数据库的数据。服务器 ID 可以在运行 |
|
指向现有数据库备份或转储的 URI。 |
定义一个来自外部源的相同种子,该种子将用于播种所有服务器。有关更多信息,请参阅 从 URI 创建数据库。 |
|
以逗号分隔的配置值列表。 |
|
|
凭据 |
定义需要传递给某些种子提供程序的凭据。建议使用 |
|
|
定义为了变更数据捕获 (CDC) 目的而应用于事务日志的增强级别。 有关增强模式的详细信息,请参阅 变更数据捕获手册 → 在自管理实例上启用 CDC → 修改数据库的 CDC 模式。 |
|
|
如果创建的是新数据库,则定义存储格式。 如果存储是通过 |
|
从 Neo4j 2025.01 开始,您可以将
|
CREATE DATABASE [OR REPLACE] 命令可以包含一个选项映射,例如 OPTIONS {key: 'value'}。
| 键 | 值 | 描述 |
|---|---|---|
|
集群服务器的 ID |
定义使用哪个服务器来播种所创建数据库的数据。服务器 ID 可以在运行 |
|
指向备份、包含备份工件的文件夹或现有数据库转储的 URI。 |
定义来自外部源的种子,它将用于播种所有服务器。 |
|
以逗号分隔的配置值列表。 |
有关更多信息,请参阅 从 URI 创建数据库。 |
|
|
定义为了变更数据捕获 (CDC) 目的而应用于事务日志的增强级别。 有关增强模式的详细信息,请参阅 变更数据捕获手册 → 在自管理实例上启用 CDC → 切换 CDC 模式。 |
|
|
如果创建的是新数据库,则定义存储格式。 如果存储是通过 |
|
日期时间或事务 ID。例如 |
如果您传递的 |
|
源数据库名称 |
如果 |
|
|
仅为向后兼容性保留,无效,并将在未来版本中删除。 |
|
在 Cypher 25 中,已删除了 |
以下示例展示了如何使用带各种选项的 CREATE DATABASE 命令来创建数据库。
创建数据库
要创建名为 actors 的数据库,请使用 CREATE DATABASE 命令,后跟数据库名称。
CREATE DATABASE actors
创建数据库后,它会显示在 SHOW DATABASES 命令提供的列表中。
SHOW DATABASES YIELD name
+-------------+ | name | +-------------+ | "actors" | | "movies" | | "neo4j" | | "system" | +-------------+
使用 WAIT 创建数据库
子句 WAIT 允许您指定命令完成并返回的时间限制。
CREATE DATABASE slow WAIT 5 SECONDS
+-------------------------------------------------------+ | address | state | message | success | +-------------------------------------------------------+ | "localhost:7687" | "CaughtUp" | "caught up" | TRUE | +-------------------------------------------------------+
success 列提供了命令是否被视为成功的聚合状态。因此,在成功完成且未超时的情况下,每一行都有相同的值。
子句 WAIT 允许您指定命令完成并返回的时间限制。
CREATE DATABASE slow WAIT 5 SECONDS
info: Server `ServerId{b55c6551}` at address `server1:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)
info: Server `ServerId{a9e7e8f1}` at address `server2:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)
info: Server `ServerId{0f7cb48e}` at address `server3:7687` has caught up.
03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)
该命令为集群中的每个服务器返回一个通知,以指示该命令在该服务器上的状态。在此示例中,所有三个集群成员都返回了 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp),这表明服务器已成功应用了该命令并且是最新的。
使用 IF NOT EXISTS 或 OR REPLACE 创建数据库
CREATE DATABASE 命令是可选幂等的,默认行为是如果数据库已存在则失败并报错。有两种方法可以规避此行为。
首先,在命令后附加 IF NOT EXISTS 可以确保如果给定名称的数据库或数据库别名已经存在,则不会返回错误,且不会发生任何操作。
CREATE DATABASE actors IF NOT EXISTS
其次,在命令中添加 OR REPLACE 会删除任何现有的数据库并创建一个新的数据库。
CREATE OR REPLACE DATABASE actors
这等同于运行 DROP DATABASE actors IF EXISTS,然后运行 CREATE DATABASE actors。
请记住,使用 CREATE OR REPLACE DATABASE 也会删除索引和约束。要保留它们,请在 CREATE OR REPLACE DATABASE 之前运行以下 Cypher 命令并保存其输出。
SHOW CONSTRAINTS YIELD createStatement AS statement
SHOW INDEXES YIELD createStatement, owningConstraint
WHERE owningConstraint IS NULL
RETURN createStatement AS statement
IF NOT EXISTS 和 OR REPLACE 的行为适用于标准数据库和复合数据库(例如,复合数据库可以替换标准数据库或另一个复合数据库)。IF NOT EXISTS 还会捕获是否存在给定名称的任何数据库别名,并执行无操作,而不是在现有别名共享该名称时抛出错误。
|
这些命令中的 |
为标准数据库设置默认 Cypher 版本引入于 2025.06
您可以在创建数据库时为其设置默认 Cypher 版本。如果未指定,该数据库的版本将设置为 DBMS 的默认 Cypher 版本。例如
CREATE DATABASE actors DEFAULT LANGUAGE CYPHER 25
此命令创建一个名为 actors 的数据库,并将默认 Cypher 版本设置为 25。
要查看 DBMS 中每个数据库的默认 Cypher 版本,请使用 YIELD 子句运行 SHOW DATABASES 命令,并指定 defaultLanguage 列。例如
SHOW DATABASES YIELD name, defaultLanguage
| 名称 (name) | defaultLanguage |
|---|---|
|
|
|
|
|
|
|
|
行:4 |
|
有关配置 Cypher 版本的其他选项的更多信息,请参阅 配置 Cypher 默认版本。
|
将默认语言设置为 |