NEO4J-UNIQUE约束

1,055 阅读2分钟

在neo4j数据库中,CREATE命令始终创建新的节点或关系,这意味着即使使用相同的值,也会插入新行。但很多时候我们需要避免这种重复,与SQL类似,可以使用UNIQUE约束。

UNIQUE约束的优点

  • 避免重复记录
  • 强制执行数据完整性规则

Neo4j CQL UNIQUE约束操作

  • 创建UNIQUE约束
  • 删除UNIQUE约束

下面将从这两个方面展开。

1.创建UNIQUE约束

1.1 语法

CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE

1.2 案例

在这里将检查两种情况。

  • 如果数据库包含重复的Paper节点。
  • 如果数据库不包含重复的Paper节点。

1.2.1 如果数据库包含重复的Paper节点

1.2.1.1 创建节点

CREATE (p:Paper{id:01,number:111,name:'AAA',date:'01/01/2020'})
CREATE (p:Paper{id:02,number:222,name:'BBB',date:'03/06/2019'})
CREATE (p:Paper{id:03,number:333,name:'CCC',date:'06/04/2018'})
CREATE (p:Paper{id:02,number:222,name:'PPP',date:'09/06/2019'})
CREATE (p:Paper{id:02,number:222,name:'BBB',date:'03/06/2019'})

1.2.1.2 查看节点

MATCH (p:Paper)
RETURN p

点击执行按钮,查看结果:

1.2.1.3 UNIQUE约束

键入以下命令:

CREATE CONSTRAINT ON (p:Paper)
ASSERT p.number IS UNIQUE

提示无法在number属性上创建UNIQUE约束,抛出错误,表示重复节点可用。

1.2.1.4 删除节点

使用DELETE命令删除重复记录,键入以下命令

MATCH (p:Paper) 
WHERE p.number = 222
DELETE p

1.2.1.5 再次查看节点

MATCH (p:Paper)
RETURN p

number=222的节点被删除,仅剩2个节点。

1.2.1.6 加入节点
CREATE (p:Paper{id:02,number:222,name:'BBB',date:'03/06/2019'})

现在数据库中不包含重复节点

注意: 也就是说,创建UNIQUE约束时,该属性不能有重复值,只能给不重复的节点创建UNIQUE约束。

1.2.2 如果数据库不包含重复的Paper节点

键入以下命令:

CREATE CONSTRAINT ON (p:Paper)
ASSERT p.number IS UNIQUE

成功地对number属性创建UNIQUE约束

如果应用程序尝试插入重复的number号码,Neo4j DB服务器将会抛出一个错误,表示数据库中已存在相同的数字。

检验UNIQUE约束是否正常工作:

CREATE (p:Paper{id:02,number:222,name:'BBB',date:'03/06/2019'})

提示已经存在number=222的节点,因为它有唯一约束,不能加入重复节点。

2.删除UNIQUE约束

2.1 语法

DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE

2.2 案例

2.2.1 查看节点

MATCH (p:Paper)
RETURN p

2.2.2 删除UNIQUE约束

DROP CONSTRAINT ON (p:Paper)
ASSERT p.number IS UNIQUE

2.2.3 创建重复节点

CREATE (p:Paper{id:02,number:222,name:'BBB',date:'03/06/2019'})

创建成功,证明UNIQUE约束已被删除