Neo4j CQL - 唯一约束
在Neo4j的数据库,CQL create命令总是创建新的节点或关系,这意味着即使使用相同的价值观,它插入一个新行。 根据我们的某些节点或关系的应用需求,我们必须避免这种重复。 然后,我们不能直接得到这个。 我们应该用一些数据库约束在节点或关系的一个或多个属性创建规则。
像SQL,Neo4j的数据库还支持节点或关系的属性UNIQUE约束
唯一约束的优点
- 为了避免重复记录。
- 为了保持数据完整性规则。
Neo4j的CQL唯一约束运营
- 创建唯一约束。
- 掉落唯一约束。
我们将讨论这一章中的例子创建唯一约束操作。
创建唯一约束
Neo4j的CQL提供了“创建约束”命令创建的节点或关系的属性的唯一约束。
创建唯一约束语法
CREATE CONSTRAINT ON (<label_name>) ASSERT <property_name> IS UNIQUE
语法说明
S.No. | 语法元素 | 描述 |
---|---|---|
1。 | 创建约束ON | 这是一个Neo4j的CQL关键字。 |
2。 | <LABEL_NAME> | 这是一个节点或关系的标签名称。 |
3。 | 断言 | 这是一个Neo4j的CQL关键字。 |
4。 | <PROPERTY_NAME> | 这是一个节点或关系的属性名。 |
5。 | 是独一无二的 | 这是一个Neo4j的CQL关键字通知Neo4j的数据库服务器上创建一个唯一约束。 |
注意:-
上述语法描述了它的<PROPERTY_NAME> <LABEL_NAME>节点或关系创造了一个独特的约束。
示例-
这个例子演示了如何在信用卡式节点数量的属性创建唯一约束。
注: -在这里,我们将检查两种情形。
- 如果数据库包含重复CreidtCard节点。
- 如果数据库不包含重复CreidtCard节点。
情景1)如果这个CreidtCard包含重复的节点,如何如下。
第1步 -请在数据浏览器下面的命令
MATCH (cc:CreditCard) RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv
第2步 -点击执行按钮,观察结果。

CreditCard.number = 222222被分配给3个节点。
第3步 -在数据浏览器的美元提示符处键入以下命令。
CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
然后,如果我们试图创建数字财产的UNIQUE约束,那么它会抛出错误说重复节点可用

消息说,无法创建数字属性唯一约束。

情景2)如果CreidtCard不包含重复的节点,如何如下。
首先,通过使用DELETE命令删除重复的记录。 键入数据浏览器下面的命令
MATCH (cc:CreditCard) WHERE cc.number = 222222 DELETE cc

点击执行命令并观察结果

我们可以观察到,所有3个重复的节点从数据库永久删除。
第1步 -在数据浏览器的美元提示符处键入以下命令。
MATCH (cc:CreditCard) RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv

然后执行下面的命令表格数据浏览器
CREATE (cc:CreditCard {id:22,number:222222,name:'BBB' ,expiredate:'10/10/2017',cvv:222})
它创建一个数一个节点= 222222。现在我们执行下面的命令表格数据浏览器,以确认我们的数据库不包含信用卡式重复节点
MATCH (cc:CreditCard) RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv

第2步 -在数据浏览器的美元提示符处键入以下命令。
CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE

然后,它成功创建上的数字财产唯一约束。

MATCH (cc:CreditCard) RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv
我们可以观察到一个约束被添加到数据库。
在这里,我们创建了信用卡式节点的号码属性的唯一约束。 根据我们的客户要求才行,信用卡式的数字应该是唯一的。
如果应用程序试图插入重复信用卡式号码,Neo4j的DB服务器将抛出一个错误,指出相同数量已经存在于数据库中。
示例-
这个例子演示了如何检查一个信用卡式节点数量的属性唯一约束是否正常工作。
第1步 -在数据浏览器的美元提示符处键入以下命令。
MATCH (cc:CreditCard) RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv

第2步 -点击执行按钮,观察结果。

我们可以观察到,数据库包含3信用卡式的节点。
第3步 -在数据浏览器的美元提示符处键入以下命令。
CREATE (cc:CreditCard {id:22,number:222222,name:'BBB', expiredate:'10/10/2017',cvv:222})

第4步 -点击执行按钮,观察结果。

它说,创建具有相同CreditCard.number重复节点是不可能的,因为它有一个唯一约束