语法

此页面包含用于创建、列出和删除 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
在单个属性上创建关系属性唯一性约束的语法 5.7 版引入
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] UNIQUE
在多个属性上创建复合关系属性唯一性约束的语法 5.7 版引入
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 | STRING5.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
在单个属性上创建关系键约束的语法 5.7 版引入
CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS]
FOR ()-"["r:RELATIONSHIP_TYPE"]"-()
REQUIRE r.propertyName IS [REL[ATIONSHIP]] KEY
在多个属性上创建复合关系键约束的语法 5.7 版引入
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]]

类型过滤关键字根据约束类型过滤返回的约束

表 1. 类型过滤器
过滤器 描述

ALL

返回所有约束,不对约束类型进行过滤。如果没有给出过滤器,这是默认值。

NODE UNIQUE[NESS]

返回节点属性唯一性约束。5.7 版引入

REL[ATIONSHIP] UNIQUE[NESS]

返回关系属性唯一性约束。5.7 版引入

UNIQUE[NESS]

返回所有属性唯一性约束,包括节点和关系。允许使用 UNIQUENESS 是在 5.3 版中引入的

NODE [PROPERTY] EXIST[ENCE]

返回节点属性存在性约束。

REL[ATIONSHIP] [PROPERTY] EXIST[ENCE]

返回关系属性存在性约束。

[PROPERTY] EXIST[ENCE]

返回所有属性存在性约束,包括节点和关系。

NODE PROPERTY TYPE

返回节点属性类型约束。5.9 版引入

REL[ATIONSHIP] PROPERTY TYPE

返回关系属性类型约束。5.9 版引入

PROPERTY TYPE

返回所有属性类型约束,包括节点和关系。5.9 版引入

NODE KEY

返回节点键约束。

REL[ATIONSHIP] KEY

返回关系键约束。5.7 版引入

KEY

返回所有节点和关系键约束。5.7 版引入

有关如何列出约束的示例,请参见创建、显示和删除约束 → SHOW CONSTRAINTS。有关 SHOW CONSTRAINTS 命令结果列的完整详细信息,请参见创建、显示和删除约束 → 列出约束的结果列

删除约束

约束使用 DROP CONSTRAINT 命令删除。删除约束通过指定约束的名称来完成。

删除约束需要 DROP CONSTRAINT 权限
按名称删除约束的语法
DROP CONSTRAINT constraint_name [IF EXISTS]

此命令是可选幂等的。这意味着如果尝试两次删除相同的约束,其默认行为是抛出错误。使用 IF EXISTS 标志时,如果约束不存在,则不会抛出错误,也不会发生任何事情。自 Neo4j 5.17 起,将返回一条信息性通知,详细说明约束不存在。

有关如何删除约束的示例,请参见创建、显示和删除约束 → DROP CONSTRAINT

© . All rights reserved.