语法
本页包含图类型和约束命令的语法。有关语法的更多详细信息,请参阅《操作手册》→ 用于管理命令的 Cypher® 语法。
图类型仅限 Cypher 25企业版Neo4j 2026.02 中引入
节点和关系元素类型
([alias] {IS | :} IdentifyingLabelName {=> | IMPLIES} [{IS | :} ImpliedLabelName[&...]] [“{“ {propertyName [[IS] :: | IS TYPED] <TYPE> [IS [NODE] {KEY | UNIQUE}]}[, ...] “}”])
[REQUIRE {alias.propertyName | (alias.propertyName[, ...])} IS [NODE] {KEY | UNIQUE}][...]
| 节点元素类型需要一个或多个隐含标签,或者一个非空的属性映射。 |
更多信息,请参阅 设置图类型 → 节点元素类型。
([nodeAlias | [nodeAlias] {IS | :} LabelName [=> | IMPLIES]])-”[“ [alias] {IS | :} IDENTIFYING_RELATIONSHIP_TYPE {=> | IMPLIES} [“{“ {propertyName [[IS] :: | IS TYPED] <TYPE> [IS [REL[ATIONSHIP]] {KEY | UNIQUE}]}[, ...] “}”] “]”->([nodeAlias | [nodeAlias] {IS | :} LabelName [=> | IMPLIES]])
[REQUIRE {alias.propertyName | (alias.propertyName[, ...])} IS [REL[ATIONSHIP]] {KEY | UNIQUE}][...]
|
关系元素类型需要以下条件之一:
|
更多信息,请参阅 设置图类型 → 关系元素类型。
<TYPE> 可以是 图类型中的约束定义 中列出的属性类型之一,或者是这些类型的 NOT NULL 版本,或是 ANY NOT NULL。这些类型的允许语法变体列在 值与类型 → 类型及其同义词 中。
属性类型表达式的三种变体:IS ::、:: 和 IS TYPED 是同一表达式的语法同义词。在图类型中定义节点和关系元素类型时,推荐使用 :: 变体。
图类型中的约束定义
识别节点元素类型的标签的属性唯一性和键约束 |
|
识别关系元素类型的关系类型的属性唯一性和键约束 |
|
更多信息,请参阅 设置图类型 → 识别标签和类型的属性唯一性与键约束。
节点键和属性唯一性约束 |
|
节点属性存在性和属性类型约束 |
|
关系键和属性唯一性约束 |
|
关系属性存在性和属性类型约束 |
|
更多信息,请参阅 设置图类型 → 非识别标签和类型的约束。
属性类型表达式的三种变体:IS ::、:: 和 IS TYPED 是同一表达式的语法同义词。在图类型中定义约束时,推荐使用 IS :: 变体。
<TYPE> 可以是以下属性类型之一:
-
布尔值 (BOOLEAN) -
STRING -
INTEGER(整数) -
FLOAT -
DATE -
LOCAL TIME -
ZONED TIME -
LOCAL DATETIME -
ZONED DATETIME -
DURATION(持续时间) -
POINT -
VECTOR<TYPE>(DIMENSION)仅限 Cypher 25 在 Neo4j 2025.10 中引入 -
LIST<BOOLEAN NOT NULL> -
LIST<STRING NOT NULL> -
LIST<INTEGER NOT NULL> -
LIST<FLOAT NOT NULL> -
LIST<DATE NOT NULL> -
LIST<LOCAL TIME NOT NULL> -
LIST<ZONED TIME NOT NULL> -
LIST<LOCAL DATETIME NOT NULL> -
LIST<ZONED DATETIME NOT NULL> -
LIST<DURATION NOT NULL> -
LIST<POINT NOT NULL> -
上述类型的任何封闭动态联合,例如
INTEGER | FLOAT | STRING。
由于不支持存储 VECTOR 值列表,因此无法为 LIST<VECTOR<TYPE>(DIMENSION) NOT NULL> 创建属性类型约束。此外,VECTOR 属性类型约束必须使用特定的维度和坐标值创建,其中维度必须大于 0 且小于或等于 4096。更多信息,请参阅 值与类型 → 向量。 |
这些类型的允许语法变体列在 值与类型 → 类型及其同义词 中。
设置图类型
|
设置图类型需要以下权限:
|
ALTER CURRENT GRAPH TYPE SET 的语法ALTER CURRENT GRAPH TYPE SET “{“
[{<node element type> | <relationship element type> | <constraint on identifying label/type> | <constraint on non-identifying label/type>}[, ...]]
“}”
更多信息,请参阅 设置图类型。
扩展图类型
|
扩展图类型需要以下权限:
|
ALTER CURRENT GRAPH TYPE ADD 的语法ALTER CURRENT GRAPH TYPE ADD “{“
[{<node element type> | <relationship element type> | <constraint on identifying label/type> | <constraint on non-identifying label/type>}[, ...]]
“}”
任何添加的元素类型和约束必须与现有的元素类型和约束一起构成有效的图类型。这意味着,例如,ADD 不能修改现有元素类型,只能添加新的元素类型。不能向用作元素类型识别标签/类型的节点标签/关系类型添加独立约束。如果识别标签/类型已经定义了独立约束,也不能添加相应的元素类型。 |
更多信息,请参阅 扩展图类型。
修改元素类型
|
修改图类型中的元素类型需要以下权限:
|
ALTER CURRENT GRAPH TYPE ALTER 的语法ALTER CURRENT GRAPH TYPE ALTER “{“
[{<node element type> | <relationship element type>}[, ...]]
“}”
|
注意以下几点:
|
更多信息,请参阅 修改元素类型。
显示图类型
显示图类型需要 SHOW CONSTRAINTS 权限。 |
SHOW CURRENT GRAPH TYPE
[WHERE expression]
SHOW CURRENT GRAPH TYPE
YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]
[WHERE expression]
[RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
更多信息,请参阅 显示图类型。有关 SHOW CURRENT GRAPH TYPE 命令返回的列的完整详细信息,请参阅 显示图类型 → SHOW CURRENT GRAPH TYPE 的结果列。
删除图类型元素
从图类型中删除元素类型和约束需要 DROP CONSTRAINT 权限。 |
完整定义 |
|
仅识别标签 |
|
完整定义 |
|
仅识别类型 |
|
<TYPE> 可以是与 节点和关系元素类型 相同的属性类型。
| 如果提供了完整定义,则必须与正在删除的节点或关系元素类型完全匹配。 |
CONSTRAINT constraint_name
ALTER CURRENT GRAPH TYPE DROP 的语法ALTER CURRENT GRAPH TYPE DROP “{“
[{<drop node element type> | <drop relationship element type> | <drop constraint>}[, ...]]
“}”
更多信息,请参阅 删除图类型元素。
约束
创建约束
约束通过 CREATE CONSTRAINT 命令创建。创建约束时,建议提供一个约束名称。此名称必须在索引和约束中是唯一的。如果没有明确指定名称,系统会自动生成一个唯一名称。
创建约束需要 CREATE CONSTRAINT 权限。 |
CREATE CONSTRAINT 命令可以选择性地具备幂等性。这意味着其默认行为是:如果尝试创建相同的约束两次,将抛出错误。使用 IF NOT EXISTS 标志时,如果已经存在同名或相同模式和约束类型的约束,则不会抛出错误且不执行任何操作。如果存在冲突的数据、索引或约束(例如缺少属性的节点、同名索引或具有相同模式但冲突约束类型的约束),则仍可能抛出错误。如果没有执行任何操作,将返回一条信息性通知,显示阻止创建的现有约束。
创建属性唯一性约束
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS [NODE] UNIQUE
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE (n.propertyName_1, ..., n.propertyName_n) IS [NODE] UNIQUE
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] UNIQUE
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE (r.propertyName_1, ..., r.propertyName_n) IS [REL[ATIONSHIP]] UNIQUE
有关如何创建属性唯一性约束的示例,请参阅 创建约束 → 创建属性唯一性约束。属性唯一性约束由 索引支持。
创建属性存在性约束企业版
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS NOT NULL
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS NOT NULL
有关如何创建属性存在性约束的示例,请参阅 创建约束 → 创建属性存在性约束。
创建属性类型约束企业版
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName {[IS] :: | IS TYPED} <TYPE>
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName {[IS] :: | IS TYPED} <TYPE>
表达式的三种变体:IS ::、:: 和 IS TYPED 是同一表达式的语法同义词。推荐使用 IS :: 变体。
其中 <TYPE> 是以下属性类型之一:
-
布尔值 (BOOLEAN) -
STRING -
INTEGER(整数) -
FLOAT -
DATE -
LOCAL TIME -
ZONED TIME -
LOCAL DATETIME -
ZONED DATETIME -
DURATION(持续时间) -
POINT -
VECTOR<TYPE>(DIMENSION)仅限 Cypher 25 在 Neo4j 2025.10 中引入 -
LIST<BOOLEAN NOT NULL> -
LIST<STRING NOT NULL> -
LIST<INTEGER NOT NULL> -
LIST<FLOAT NOT NULL> -
LIST<DATE NOT NULL> -
LIST<LOCAL TIME NOT NULL> -
LIST<ZONED TIME NOT NULL> -
LIST<LOCAL DATETIME NOT NULL> -
LIST<ZONED DATETIME NOT NULL> -
LIST<DURATION NOT NULL> -
LIST<POINT NOT NULL> -
上述类型的任何封闭动态联合,例如
INTEGER | FLOAT | STRING。
由于不支持存储 VECTOR 值列表,因此无法为 LIST<VECTOR<TYPE>(DIMENSION) NOT NULL> 创建属性类型约束。此外,VECTOR 属性类型约束必须使用特定的维度和坐标值创建,其中维度必须大于 0 且小于或等于 4096。更多信息,请参阅 值与类型 → 向量。 |
这些类型的允许语法变体列在 类型及其同义词 中。
有关如何创建属性类型约束的示例,请参阅 创建约束 → 创建属性类型约束。
创建键约束企业版
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS [NODE] KEY
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE (n.propertyName_1, ..., n.propertyName_n) IS [NODE] KEY
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] KEY
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE (r.propertyName_1, ..., r.propertyName_n) IS [REL[ATIONSHIP]] KEY
有关如何创建键约束的示例,请参阅 创建约束 → 创建键约束。键约束由 索引支持。
显示约束
要列出所有带有默认输出列的约束,请使用 SHOW CONSTRAINTS。如果需要所有列,请使用 SHOW CONSTRAINTS YIELD *。如果仅需要特定列,请使用 SHOW CONSTRAINTS YIELD field[, …]。SHOW CONSTRAINTS 子句还可以使用 WHERE 子句进行过滤。
列出约束需要 SHOW CONSTRAINTS 权限。 |
SHOW [
ALL
|NODE [PROPERTY] UNIQUE[NESS]
|REL[ATIONSHIP] [PROPERTY] UNIQUE[NESS]
|[PROPERTY] UNIQUE[NESS]
|NODE [PROPERTY] EXIST[ENCE]
|REL[ATIONSHIP] [PROPERTY] EXIST[ENCE]
|[PROPERTY] EXIST[ENCE]
|NODE PROPERTY TYPE
|REL[ATIONSHIP] PROPERTY TYPE
|PROPERTY TYPE
|NODE KEY
|REL[ATIONSHIP] KEY
|KEY
] CONSTRAINT[S]
[WHERE expression]
SHOW [
ALL
|NODE [PROPERTY] UNIQUE[NESS]
|REL[ATIONSHIP] [PROPERTY] UNIQUE[NESS]
|[PROPERTY] UNIQUE[NESS]
|NODE [PROPERTY] EXIST[ENCE]
|REL[ATIONSHIP] [PROPERTY] EXIST[ENCE]
|[PROPERTY] EXIST[ENCE]
|NODE PROPERTY TYPE
|REL[ATIONSHIP] PROPERTY TYPE
|PROPERTY TYPE
|NODE KEY
|REL[ATIONSHIP] KEY
|KEY
] CONSTRAINT[S]
YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]
[WHERE expression]
[RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
类型过滤关键字根据约束类型过滤返回的约束:
| Filter | 描述 |
|---|---|
|
返回所有约束,不对约束类型进行过滤。如果未指定,这是默认行为。 |
|
返回节点属性唯一性约束。 |
|
返回关系属性唯一性约束。 |
|
返回节点和关系的属性唯一性约束。 |
|
返回节点属性存在性约束。 |
|
返回关系属性存在性约束。 |
|
返回节点和关系的属性存在性约束。 |
|
返回节点存在性约束。 |
|
返回关系存在性约束。 |
|
返回节点和关系的存在性约束。 |
|
返回节点属性类型约束。 |
|
返回关系属性类型约束。 |
|
返回节点和关系的属性类型约束。 |
|
返回节点键约束。 |
|
返回关系键约束。 |
|
返回节点和关系的键约束。 |
有关如何列出约束的示例,请参阅 显示约束。有关 SHOW CONSTRAINTS 命令结果列的完整详细信息,请参阅 显示约束 → 列出约束的结果列。
删除约束
约束使用 DROP CONSTRAINT 命令删除。删除约束需指定该约束的名称。
删除约束需要 DROP CONSTRAINT 权限。 |
DROP CONSTRAINT constraint_name [IF EXISTS]
此命令可以选择性地具备幂等性。这意味着其默认行为是:如果尝试删除相同的约束两次,将抛出错误。使用 IF EXISTS 标志时,如果约束不存在,则不会抛出错误且不执行任何操作。相反,会返回一条信息性通知,详细说明约束不存在。
有关如何删除约束的示例,请参阅 删除约束。