管理标准数据库的数据库别名

数据库别名有两种:本地别名和远程别名。本地数据库别名只能指向同一 DBMS 中的数据库。远程数据库别名可以指向来自另一个 Neo4j DBMS 的数据库。当针对数据库别名运行查询时,查询将被重定向到目标数据库。用户的 home 数据库可以设置为别名,该别名在使用时将被解析为目标数据库。从 Neo4j 2025.04 开始,数据库别名也可以设置为默认数据库。

本页介绍如何管理标准数据库的数据库别名。本地和远程数据库别名也可以作为复合数据库的一部分创建。更多信息,请参阅管理复合数据库中的数据库别名

本地数据库别名可以在所有其他 Cypher 命令中替代目标数据库使用。请注意,本地数据库别名将在执行命令时解析。权限是定义在数据库上的,而不是本地数据库别名上。

远程数据库别名可用于连接到远程 Neo4j DBMS 的数据库、USE 子句、设置用户的 home 数据库,以及定义对远程数据库的访问权限。远程数据库别名需要配置才能安全连接到远程目标,这在连接远程数据库中有所描述。通过远程数据库别名无法模拟远程数据库上的用户,也无法在远程数据库上执行管理命令。

数据库别名可以使用针对 system 数据库执行的一组 Cypher 管理命令来创建和管理。所需的权限在DBMS 别名管理权限中有所描述。当通过 Bolt 连接到 DBMS 时,管理命令会自动路由到 system 数据库。

如果事务修改了数据库别名,其他并发执行针对该别名的事务可能会被中止并回滚以确保安全。这可以防止诸如同一别名下的事务针对多个目标数据库执行等问题。

列出数据库别名

可以使用 SHOW ALIASES FOR DATABASE 查看可用的数据库别名。所需的权限在DBMS 别名管理权限中有所描述。

SHOW ALIASES FOR DATABASE 将生成一个包含以下列的数据库别名表

描述 类型

name

数据库别名的完全限定名称。 默认输出

STRING

composite

此别名所属的复合数据库的名称,如果别名不属于复合数据库,则为 null默认输出

STRING

database

目标数据库的名称。 默认输出

此列根据用户的 ACCESS 权限进行过滤。但是,某些权限允许用户查看其他数据库,无论其 ACCESS 权限如何

  • 拥有 CREATE DATABASEDROP DATABASEALTER DATABASESET DATABASE ACCESS 权限的用户可以查看所有标准数据库。

  • 拥有 CREATE COMPOSITE DATABASEDROP COMPOSITE DATABASECOMPOSITE DATABASE MANAGEMENT 权限的用户可以查看所有复合数据库。

  • 拥有 DATABASE MANAGEMENT 权限的用户可以查看所有数据库。

  • 用户始终可以查看 system 数据库。

如果用户未被授予目标数据库的 ACCESS 权限,并且上述特殊情况均不适用,则该数据库对用户不可见,此列将为 null

STRING

location

数据库的位置,可以是 localremote默认输出

STRING

url

目标位置,如果目标是本地的,则为 null默认输出

STRING

user

连接到远程数据库的用户,如果目标数据库是本地的,则为 null默认输出

STRING

driver

连接到远程数据库的驱动程序选项,如果目标数据库是本地的,则为 null。远程数据库别名允许的驱动程序设置列表。

MAP

properties

在数据库别名上设置的任何属性。

MAP

特定数据库别名的详细信息可以使用命令 SHOW ALIASES FOR DATABASE YIELD * 显示。当提供 YIELD * 子句时,将返回所有列。

显示数据库的所有别名

所有可用数据库别名的摘要可以使用命令 SHOW ALIASES FOR DATABASE 显示。此命令将显示标准数据库和复合数据库的数据库别名。

查询
SHOW ALIASES FOR DATABASE
结果
+--------------------------------------------------------------------------------------------+
| name              | composite | database  | location | url                       | user    |
+--------------------------------------------------------------------------------------------+
| "films"           | NULL      | "movies"  | "local"  | NULL                      | NULL    |
| "motion pictures" | NULL      | "movies"  | "local"  | NULL                      | NULL    |
| "movie scripts"   | NULL      | "scripts" | "remote" | "neo4j+s://location:7687" | "alice" |
+--------------------------------------------------------------------------------------------+

显示特定数据库的别名

要只列出一个数据库别名,SHOW ALIASES 命令需要一个别名名称;

查询
SHOW ALIAS films FOR DATABASES
结果
+---------------------------------------------------------+
| name    | composite | database | location | url  | user |
+---------------------------------------------------------+
| "films" | NULL      | "movies" | "local"  | NULL | NULL |
+---------------------------------------------------------+

显示数据库的详细别名信息

查询
SHOW ALIASES FOR DATABASE YIELD *
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name              | composite | database  | location | url                       | user    | driver                                                                                                                                                                                                         | properties                |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "films"           | NULL      | "movies"  | "local"  | NULL                      | NULL    | NULL                                                                                                                                                                                                           | {}                        |
| "motion pictures" | NULL      | "movies"  | "local"  | NULL                      | NULL    | NULL                                                                                                                                                                                                           | {namecontainsspace: TRUE} |
| "movie scripts"   | NULL      | "scripts" | "remote" | "neo4j+s://location:7687" | "alice" | {connection_pool_idle_test: PT2M, connection_pool_max_size: 10, logging_level: "INFO", ssl_enforced: TRUE, connection_pool_acquisition_timeout: PT1M, connection_timeout: PT5S, connection_max_lifetime: PT1H} | {}                        |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

显示数据库别名的 count

数据库别名的数量可以使用 YIELDRETURNcount() 聚合来查看。

查询
SHOW ALIASES FOR DATABASE YIELD *
RETURN count(*) as count
结果
+-------+
| count |
+-------+
| 3     |
+-------+

显示数据库的过滤别名信息

可以使用 YIELDORDER BYWHERE 过滤和排序结果。

查询
SHOW ALIASES FOR DATABASE YIELD name, url, database
ORDER BY database
WHERE name CONTAINS 'e'

在此示例中

  • 返回的列数已通过 YIELD 子句减少。

  • 返回列的顺序已更改。

  • 结果通过 ORDER BYdatabase 列排序。

  • 结果已过滤,只显示包含 'e' 的数据库别名。

也可以使用 SKIPLIMIT 对结果进行分页。

结果
+-----------------------------------------------------------+
| name              | url                       | database  |
+-----------------------------------------------------------+
| "motion pictures" | NULL                      | "movies"  |
| "movie scripts"   | "neo4j+s://location:7687" | "scripts" |
+-----------------------------------------------------------+

创建数据库别名

数据库别名可以使用 CREATE ALIAS 创建。该命令支持创建本地和远程数据库别名。有关作为复合数据库一部分的本地和远程数据库别名的更多信息,请参阅在复合数据库中创建数据库别名

所需的权限在DBMS 别名管理权限中有所描述。

数据库别名名称须遵守别名名称部分中指定的规则。

为本地数据库创建数据库别名

本地数据库别名指向同一 DBMS 中的数据库。

查询
CREATE ALIAS `northwind` FOR DATABASE `northwind-graph-2021`

当您创建本地数据库别名时,它会显示在 SHOW DATABASES 命令提供的 aliases 列中,以及 SHOW ALIASES FOR DATABASE 命令中。

查询
SHOW DATABASE `northwind`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases       | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | ["northwind"] | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
查询
SHOW ALIAS `northwind` FOR DATABASE
结果
+---------------------------------------------------------------------------+
| name        | composite | database               | location | url  | user |
+---------------------------------------------------------------------------+
| "northwind" | NULL      | "northwind-graph-2021" | "local"  | NULL | NULL |
+---------------------------------------------------------------------------+

创建数据库别名时使用 IF EXISTSOR REPLACE

CREATE ALIAS 命令是可选的幂等的,其默认行为是在数据库别名已存在时报错。有两种方法可以规避此行为。

首先,在命令后附加 IF NOT EXISTS 可确保如果数据库别名已存在,则不返回错误,也不会发生任何事情。

查询
CREATE ALIAS `northwind` IF NOT EXISTS  FOR DATABASE `northwind-graph-2021`

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

查询
CREATE OR REPLACE ALIAS `northwind` FOR DATABASE `northwind-graph-2021`

这等同于运行 DROP ALIAS `northwind` IF EXISTS FOR DATABASE`,然后是 `CREATE ALIAS `northwind FOR DATABASE northwind-graph-2021++`。

这些命令的 IF NOT EXISTSOR REPLACE 部分不能一起使用。

为本地数据库别名设置属性

本地数据库别名也可以设置属性。这些属性随后可以在查询中与 graph.propertiesByName() 函数一起使用。

查询
CREATE ALIAS `northwind-2022`
FOR DATABASE `northwind-graph-2022`
PROPERTIES { newestNorthwind: true, index: 3 }

这些属性随后会显示在 SHOW ALIASES FOR DATABASE YIELD …​ 命令中。

查询
SHOW ALIAS `northwind-2022` FOR DATABASE YIELD name, properties
结果
+------------------------------------------------------+
| name             | properties                        |
+------------------------------------------------------+
| "northwind-2022" | {index: 3, newestnorthwind: TRUE} |
+------------------------------------------------------+

为远程数据库创建数据库别名

数据库别名可以通过提供 URL 和远程 Neo4j DBMS 上用户的凭据来指向远程数据库。有关必要的配置,请参阅配置远程数据库别名

与本地数据库别名一样,创建远程数据库别名也允许使用 IF NOT EXISTSOR REPLACE 子句。两者都会检查是否存在任何远程或本地数据库别名。

查询
CREATE ALIAS `remote-northwind` FOR DATABASE `northwind-graph-2020`
AT "neo4j+s://location:7687"
USER alice
PASSWORD 'example_secret'

当您创建指向远程数据库的数据库别名时,可以使用 SHOW ALIASES FOR DATABASE 命令显示其详细信息。

查询
SHOW ALIAS `remote-northwind`
FOR DATABASE
结果
+----------------------------------------------------------------------------------------------------------+
| name               | composite | database               | location | url                       | user    |
+----------------------------------------------------------------------------------------------------------+
| "remote-northwind" | NULL      | "northwind-graph-2020" | "remote" | "neo4j+s://location:7687" | "alice" |
+----------------------------------------------------------------------------------------------------------+

使用驱动程序设置创建远程数据库别名

可以为每个数据库别名覆盖用于连接远程数据库的默认驱动程序设置。

以下是远程数据库别名允许的驱动程序设置列表

驱动程序设置在 CREATE ALIASALTER ALIAS 命令的 DRIVER 子句中设置。例如,以下查询使用驱动程序设置 connection_timeoutconnection_pool_max_size 来创建连接到远程数据库 northwind-graph-2020 的远程数据库别名

查询
CREATE ALIAS `remote-with-driver-settings` FOR DATABASE `northwind-graph-2020`
AT "neo4j+s://location:7687"
USER alice
PASSWORD 'example_secret'
DRIVER {
  connection_timeout: duration({minutes: 1}),
  connection_pool_max_size: 10
}

创建指向远程数据库的数据库别名后,可以使用 SHOW ALIASES FOR DATABASE 命令显示其详细信息。

查询
SHOW ALIAS `remote-with-driver-settings` FOR DATABASE YIELD *
结果
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                          | composite | database               | location | url                       | user    | driver                                                   | properties |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "remote-with-driver-settings" | NULL      | "northwind-graph-2020" | "remote" | "neo4j+s://location:7687" | "alice" | {connection_pool_max_size: 10, connection_timeout: PT1M} | {}         |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

为远程数据库别名设置属性

与本地数据库别名一样,远程数据库别名也可以设置属性。这些属性随后可以在查询中与 graph.propertiesByName() 函数一起使用。

查询
CREATE ALIAS `remote-northwind-2021` FOR DATABASE `northwind-graph-2021` AT 'neo4j+s://location:7687'
USER alice PASSWORD 'password'
PROPERTIES { newestNorthwind: false, index: 6 }

这些属性随后会显示在 SHOW ALIASES FOR DATABASE YIELD …​ 命令中。

查询
SHOW ALIAS `remote-northwind-2021` FOR DATABASE YIELD name, properties
结果
+--------------------------------------------------------------+
| name                    | properties                         |
+--------------------------------------------------------------+
| "remote-northwind-2021" | {index: 6, newestnorthwind: FALSE} |
+--------------------------------------------------------------+

修改数据库别名

数据库别名可以使用 ALTER ALIAS 进行修改,以更改其数据库目标、属性、URL、用户凭据或驱动程序设置。所需的权限在DBMS 别名管理权限中有所描述。只会修改使用的子句。

本地数据库别名不能更改为远程别名,反之亦然。

修改本地数据库别名

修改本地数据库别名目标的示例。

查询
ALTER ALIAS `northwind`
SET DATABASE TARGET `northwind-graph-2021`

当本地数据库别名被修改后,它将显示在 SHOW DATABASES 命令提供的目标数据库的 aliases 列中。

查询
SHOW DATABASE `northwind-graph-2021`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases       | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | ["northwind"] | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

修改远程数据库别名

修改远程数据库别名目标的示例。

查询
ALTER ALIAS `remote-northwind` SET DATABASE
TARGET `northwind-graph-2020` AT "neo4j+s://other-location:7687"

修改远程数据库别名的远程凭据和驱动程序设置

修改远程数据库别名凭据和驱动程序设置的示例。

查询
ALTER ALIAS `remote-with-driver-settings` SET DATABASE
USER bob
PASSWORD 'new_example_secret'
DRIVER {
  connection_timeout: duration({ minutes: 1}),
  logging_level: 'debug'
}

所有驱动程序设置都将被新的设置替换。在这种情况下,不重复驱动程序设置 connection_pool_max_size 将导致该值被删除并回退到默认值。

从远程数据库别名中移除自定义驱动程序设置

修改远程数据库别名以移除所有自定义驱动程序设置的示例。

查询
ALTER ALIAS `movie scripts` SET DATABASE
DRIVER {}

修改本地和远程数据库别名的属性

修改本地和远程数据库别名属性的示例。

查询
ALTER ALIAS `motion pictures` SET DATABASE PROPERTIES { nameContainsSpace: true, moreInfo: 'no, not really' }
查询
ALTER ALIAS `movie scripts` SET DATABASE PROPERTIES { nameContainsSpace: true }

更新后的属性随后可以在查询中与 graph.propertiesByName() 函数一起使用。

修改数据库别名时使用 IF EXISTS

ALTER ALIAS 命令是可选的幂等的,其默认行为是在数据库别名不存在时报错。在命令后附加 IF EXISTS 可确保如果别名不存在,则不返回错误,也不会发生任何事情。

查询
ALTER ALIAS `no-alias` IF EXISTS SET DATABASE TARGET `northwind-graph-2021`
(no changes, no records)

删除数据库别名

本地和远程数据库别名都可以使用 DROP ALIAS 命令删除。所需的权限在DBMS 别名管理权限中有所描述。

删除本地数据库别名

删除本地数据库别名。

查询
DROP ALIAS `northwind` FOR DATABASE

数据库别名被删除后,它将不再显示在 SHOW DATABASES 命令提供的 aliases 列中。

查询
SHOW DATABASE `northwind-graph-2021`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | []      | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

删除远程数据库别名

删除远程数据库别名。

查询
DROP ALIAS `remote-northwind` FOR DATABASE

数据库别名被删除后,它将不再显示在 SHOW ALIASES FOR DATABASE 命令中。

查询
SHOW ALIASES `remote-northwind` FOR DATABASE
结果
+-----------------------------------------------------+
| name | composite | database | location | url | user |
+-----------------------------------------------------+
+-----------------------------------------------------+

删除数据库别名时使用 IF EXISTS

DROP ALIAS 命令是可选的幂等的,其默认行为是在数据库别名不存在时报错。在别名名称后插入 IF EXISTS 可确保如果别名不存在,则不返回错误,也不会发生任何事情。

查询
DROP ALIAS `northwind` IF EXISTS FOR DATABASE
(no changes, no records)