语法
此页面包含用于创建、列出和删除 Neo4j 中可用约束的语法。
有关语法的更多详细信息,请参见操作手册 → 用于管理命令的 Cypher® 语法。
创建约束
约束使用 CREATE CONSTRAINT 命令创建。创建约束时,建议提供一个约束名称。此名称在索引和约束之间必须是唯一的。如果未明确给出名称,将自动生成一个唯一名称。
创建约束需要 CREATE CONSTRAINT 权限。 |
CREATE CONSTRAINT 命令是可选幂等的。这意味着如果尝试两次创建相同的约束,其默认行为是抛出错误。使用 IF NOT EXISTS 标志时,如果已存在具有相同名称或相同模式和约束类型的约束,则不会抛出错误,也不会发生任何事情。如果存在冲突数据、索引或约束,仍可能抛出错误。例如,具有缺失属性的节点、具有相同名称的索引或具有相同模式但不同冲突约束类型的约束。自 Neo4j 5.17 起,如果未发生任何事情,将返回一条信息性通知,显示阻止创建的现有约束。
创建属性唯一性约束
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
表达式的三种变体:IS ::、:: 和 IS TYPED 是相同表达式的语法同义词。首选语法是 IS :: 变体。
创建属性类型约束
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 -
LIST<BOOLEAN NOT NULL>5.10 版引入 -
LIST<STRING NOT NULL>5.10 版引入 -
LIST<INTEGER NOT NULL>5.10 版引入 -
LIST<FLOAT NOT NULL>5.10 版引入 -
LIST<DATE NOT NULL>5.10 版引入 -
LIST<LOCAL TIME NOT NULL>5.10 版引入 -
LIST<ZONED TIME NOT NULL>5.10 版引入 -
LIST<LOCAL DATETIME NOT NULL>5.10 版引入 -
LIST<ZONED DATETIME NOT NULL>5.10 版引入 -
LIST<DURATION NOT NULL>5.10 版引入 -
LIST<POINT NOT NULL>5.10 版引入 -
上述类型的任何封闭动态联合,例如
INTEGER | FLOAT | STRING。 5.11 版引入
这些类型允许的语法变体列在类型及其同义词中。
有关如何创建属性类型约束的示例,请参见创建、显示和删除约束 → 创建属性类型约束。
创建键约束
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 UNIQUE[NESS]
|REL[ATIONSHIP] UNIQUE[NESS]
|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 UNIQUE[NESS]
|REL[ATIONSHIP] UNIQUE[NESS]
|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]]
类型过滤关键字根据约束类型过滤返回的约束
| 过滤器 | 描述 |
|---|---|
|
返回所有约束,不对约束类型进行过滤。如果没有给出过滤器,这是默认值。 |
|
返回节点属性唯一性约束。5.7 版引入 |
|
返回关系属性唯一性约束。5.7 版引入 |
|
返回所有属性唯一性约束,包括节点和关系。允许使用 |
|
返回节点属性存在性约束。 |
|
返回关系属性存在性约束。 |
|
返回所有属性存在性约束,包括节点和关系。 |
|
返回节点属性类型约束。5.9 版引入 |
|
返回关系属性类型约束。5.9 版引入 |
|
返回所有属性类型约束,包括节点和关系。5.9 版引入 |
|
返回节点键约束。 |
|
返回关系键约束。5.7 版引入 |
|
返回所有节点和关系键约束。5.7 版引入 |
有关如何列出约束的示例,请参见创建、显示和删除约束 → SHOW CONSTRAINTS。有关 SHOW CONSTRAINTS 命令结果列的完整详细信息,请参见创建、显示和删除约束 → 列出约束的结果列。
删除约束
约束使用 DROP CONSTRAINT 命令删除。删除约束通过指定约束的名称来完成。
删除约束需要 DROP CONSTRAINT 权限。 |
DROP CONSTRAINT constraint_name [IF EXISTS]
此命令是可选幂等的。这意味着如果尝试两次删除相同的约束,其默认行为是抛出错误。使用 IF EXISTS 标志时,如果约束不存在,则不会抛出错误,也不会发生任何事情。自 Neo4j 5.17 起,将返回一条信息性通知,详细说明约束不存在。
有关如何删除约束的示例,请参见创建、显示和删除约束 → DROP CONSTRAINT。