在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约束

检验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约束已被删除
