语法
此页面包含用于创建、列出和删除 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。