语法
此页面包含用于创建、列出和删除 Neo4j 中可用约束的语法。
有关语法的更多详细信息,请参阅操作手册 → 管理命令的 Cypher® 语法。
CREATE CONSTRAINT
使用CREATE CONSTRAINT
命令创建约束。创建约束时,建议提供约束名称。此名称在索引和约束中必须唯一。如果未显式给出名称,则会自动生成唯一名称。
创建约束需要CREATE CONSTRAINT 权限。 |
CREATE CONSTRAINT
命令可以选择性地幂等。这意味着其默认行为是在尝试两次创建相同约束时抛出错误。使用IF NOT EXISTS
标志,如果名称相同或架构和约束类型相同的约束已存在,则不会抛出错误,也不会发生任何事情。如果存在冲突的数据、索引或约束,它仍然可能会抛出错误。例如,节点缺少属性、索引名称相同或约束架构相同但约束类型冲突。从 Neo4j 5.17 开始,如果什么也没有发生,则会返回一条信息通知,显示阻止创建的现有约束。
对于由索引支持的约束,可以使用OPTIONS
子句指定支持索引的索引提供程序。索引提供程序只有一个有效值,即range-1.0
,它是默认值。范围索引没有支持的索引配置。
创建属性唯一性约束
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS [NODE] UNIQUE
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE (n.propertyName_1, ..., n.propertyName_n) IS [NODE] UNIQUE
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] UNIQUE
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE (r.propertyName_1, ..., r.propertyName_n) IS [REL[ATIONSHIP]] UNIQUE
[OPTIONS "{" option: value[, ...] "}"]
可以使用OPTIONS
子句指定索引提供程序。
有关如何创建属性唯一性约束的示例,请参阅创建、显示和删除约束 → 创建属性唯一性约束。属性唯一性约束是索引支持的。
创建属性存在约束
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS NOT NULL
[OPTIONS "{" "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS NOT NULL
[OPTIONS "{" "}"]
属性存在约束没有支持的OPTIONS
值,但为了保持一致性,允许使用空选项映射。
有关如何创建属性存在约束的示例,请参阅创建、显示和删除约束 → 创建属性存在约束。
创建属性类型约束
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName {[IS] :: | IS TYPED} <TYPE>
[OPTIONS "{" "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName {[IS] :: | IS TYPED} <TYPE>
[OPTIONS "{" "}"]
表达式的三种变体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 中引入
这些类型的允许语法变体列在类型及其同义词中。
属性类型约束没有支持的OPTIONS
值,但为了保持一致性,允许使用空选项映射。
有关如何创建属性类型约束的示例,请参阅创建、显示和删除约束 → 创建属性类型约束。
创建键约束
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE n.propertyName IS [NODE] KEY
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR (n:LabelName)
REQUIRE (n.propertyName_1, ..., n.propertyName_n) IS [NODE] KEY
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] KEY
[OPTIONS "{" option: value[, ...] "}"]
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE (r.propertyName_1, ..., r.propertyName_n) IS [REL[ATIONSHIP]] KEY
[OPTIONS "{" option: value[, ...] "}"]
可以使用OPTIONS
子句指定索引提供程序。
有关如何创建键约束的示例,请参阅 创建、显示和删除约束 → 创建键约束。键约束是 索引支持的。
SHOW CONSTRAINTS
要列出所有具有默认输出列的约束,请使用 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.3 版本中引入了允许使用 |
|
返回节点属性存在约束。 |
|
返回关系属性存在约束。 |
|
返回所有属性存在约束,包括节点和关系。 |
|
返回节点属性类型约束。 在 5.9 版本中引入 |
|
返回关系属性类型约束。 在 5.9 版本中引入 |
|
返回所有属性类型约束,包括节点和关系。 在 5.9 版本中引入 |
|
返回节点键约束。 |
|
返回关系键约束。 在 5.7 版本中引入 |
|
返回所有节点和关系键约束。 在 5.7 版本中引入 |
有关如何列出约束的示例,请参阅 创建、显示和删除约束 → SHOW CONSTRAINTS。有关 SHOW CONSTRAINTS
命令的结果列的完整详细信息,请参阅 创建、显示和删除约束 → 列出约束的结果列。
DROP CONSTRAINT
使用 DROP
CONSTRAINT 命令删除约束。删除约束是通过指定约束的名称来完成的。
删除约束需要 DROP CONSTRAINT 权限。 |
DROP CONSTRAINT constraint_name [IF EXISTS]
此命令可以选择性地幂等。这意味着其默认行为是在尝试两次删除相同约束时抛出错误。使用 IF EXISTS
标志,如果约束不存在,则不会抛出错误,也不会发生任何事情。从 Neo4j 5.17 开始,将返回一个信息通知,详细说明约束不存在。
有关如何删除约束的示例,请参阅 创建、显示和删除约束 → DROP CONSTRAINT。