阅读(3354) (1)

Neo4j CQL - UNIQUE约束

2016-12-19 07:40:50 更新

在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。 然后我们不能直接得到这个。 我们应该使用一些数据库约束来创建节点或关系的一个或多个属性的规则。


像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束


UNIQUE约束的优点

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

Neo4j CQL UNIQUE约束操作

  • 创建UNIQUE约束
  • 丢弃UNIQUE约束。

我们将在本章中用示例讨论创建UNIQUE约束操作。


创建UNIQUE约束

Neo4j CQL已提供“CREATE CONSTRAINT”命令,以在NODE或关系的属性上创建唯一约束。


创建唯一约束语法

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


语法说明:

S.No.语法元素描述
1。CREATE CONSTRAINT ON它是一个Neo4j CQL关键字。
2。<label_name>它是节点或关系的标签名称。
3。ASSERT它是一个Neo4j CQL关键字。
4。<property_name>它是节点或关系的属性名称。
5。IS UNIQUE它是一个Neo4j CQL关键字,通知Neo4j数据库服务器创建一个唯一约束。


注意:-

上述语法描述了它的<PROPERTY_NAME> <LABEL_NAME>节点或关系创造了一个独特的约束。


示例-

此示例演示如何在CreditCard节点的number属性上创建UNIQUE约束。


注: -在这里我们将检查两种情况。

  • 如果数据库包含重复的CreidtCard节点。
  • 如果数据库不包含重复的CreidtCard节点。
(场景 1)如果此CreidtCard包含重复的节点,如下所示。

步骤1 -在数据浏览器中键入以下命令

MATCH (cc:CreditCard) 
RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv


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


CreditCard.number
CreditCard.number = 222222被分配给3个节点。


步骤3 -在数据浏览器中的dollar提示符下键入以下命令。

CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE

然后,如果我们尝试在number属性上创建UNIQUE约束,那么它会抛出错误,表示重复节点可用


创建UNIQUE约束
消息提示无法在number属性上创建UNIQUE约束。


无法创建UNIQUE约束
(场景 2)如果此CreidtCard不包含如下所示的重复节点。


首先,使用DELETE命令删除重复记录。 在数据浏览器上键入以下命令

MATCH (cc:CreditCard) 
WHERE cc.number = 222222
DELETE cc


删除重复记录
点击执行命令并观察结果


我们可以观察到所有3个重复的节点从数据库中永久删除。


步骤1 -在数据浏览器中的dollar提示符下键入以下命令。

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.现在我们执行以下命令形式数据浏览器,以确认我们的数据库不包含重复节点的CreditCard

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


CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
然后它成功地对number属性创建UNIQUE约束。


MATCH (cc:CreditCard) 
RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv

我们可以观察到一个约束被添加到数据库。


这里我们在CreditCard节点的number属性上创建了一个UNIQUE约束。 因为根据我们的客户要求,CreditCard号码应该是唯一的。


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


示例-

此示例演示如何检查CreditCard节点的number属性上的UNIQUE约束是否正常工作。


步骤1 -在数据浏览器中的dollar提示符下键入以下命令。

MATCH (cc:CreditCard) 
RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv


MATCH (cc:CreditCard)  RETURN cc.id,cc.number,cc.name,cc.expiredate,cc.cvv


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


CreditCard节点
我们可以观察到数据库包含3个CreditCard节点。


步骤3 -在数据浏览器中的dollar提示符下键入以下命令。

CREATE (cc:CreditCard {id:22,number:222222,name:'BBB',
	   expiredate:'10/10/2017',cvv:222})


命令


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


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