Neo4j CQL - UNIQUE約束

2018-12-30 18:42 更新

在Neo4j數(shù)據(jù)庫中,CQL CREATE命令始終創(chuàng)建新的節(jié)點或關(guān)系,這意味著即使您使用相同的值,它也會插入一個新行。 根據(jù)我們對某些節(jié)點或關(guān)系的應(yīng)用需求,我們必須避免這種重復(fù)。 然后我們不能直接得到這個。 我們應(yīng)該使用一些數(shù)據(jù)庫約束來創(chuàng)建節(jié)點或關(guān)系的一個或多個屬性的規(guī)則。


像SQL一樣,Neo4j數(shù)據(jù)庫也支持對NODE或Relationship的屬性的UNIQUE約束


UNIQUE約束的優(yōu)點

  • 避免重復(fù)記錄。
  • 強制執(zhí)行數(shù)據(jù)完整性規(guī)則。

Neo4j CQL UNIQUE約束操作

  • 創(chuàng)建UNIQUE約束
  • 丟棄UNIQUE約束。

我們將在本章中用示例討論創(chuàng)建UNIQUE約束操作。


創(chuàng)建UNIQUE約束

Neo4j CQL已提供“CREATE CONSTRAINT”命令,以在NODE或關(guān)系的屬性上創(chuàng)建唯一約束。


創(chuàng)建唯一約束語法

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


語法說明:

S.No.語法元素描述
1。CREATE CONSTRAINT ON它是一個Neo4j CQL關(guān)鍵字。
2。<label_name>它是節(jié)點或關(guān)系的標(biāo)簽名稱。
3。ASSERT它是一個Neo4j CQL關(guān)鍵字。
4。<property_name>它是節(jié)點或關(guān)系的屬性名稱。
5。IS UNIQUE它是一個Neo4j CQL關(guān)鍵字,通知Neo4j數(shù)據(jù)庫服務(wù)器創(chuàng)建一個唯一約束。


注意:-

上述語法描述了它的<PROPERTY_NAME> <LABEL_NAME>節(jié)點或關(guān)系創(chuàng)造了一個獨特的約束。


示例-

此示例演示如何在CreditCard節(jié)點的number屬性上創(chuàng)建UNIQUE約束。


注: -在這里我們將檢查兩種情況。

  • 如果數(shù)據(jù)庫包含重復(fù)的CreidtCard節(jié)點。
  • 如果數(shù)據(jù)庫不包含重復(fù)的CreidtCard節(jié)點。
(場景 1)如果此CreidtCard包含重復(fù)的節(jié)點,如下所示。

步驟1 -在數(shù)據(jù)瀏覽器中鍵入以下命令

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


步驟2 -點擊執(zhí)行按鈕,觀察結(jié)果。


CreditCard.number
CreditCard.number = 222222被分配給3個節(jié)點。


步驟3 -在數(shù)據(jù)瀏覽器中的dollar提示符下鍵入以下命令。

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

然后,如果我們嘗試在number屬性上創(chuàng)建UNIQUE約束,那么它會拋出錯誤,表示重復(fù)節(jié)點可用


創(chuàng)建UNIQUE約束
消息提示無法在number屬性上創(chuàng)建UNIQUE約束。


無法創(chuàng)建UNIQUE約束
(場景 2)如果此CreidtCard不包含如下所示的重復(fù)節(jié)點。


首先,使用DELETE命令刪除重復(fù)記錄。 在數(shù)據(jù)瀏覽器上鍵入以下命令

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


刪除重復(fù)記錄
點擊執(zhí)行命令并觀察結(jié)果


我們可以觀察到所有3個重復(fù)的節(jié)點從數(shù)據(jù)庫中永久刪除。


步驟1 -在數(shù)據(jù)瀏覽器中的dollar提示符下鍵入以下命令。

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


然后在數(shù)據(jù)瀏覽器中執(zhí)行以下命令

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

它創(chuàng)建一個節(jié)點,編號= 222222.現(xiàn)在我們執(zhí)行以下命令形式數(shù)據(jù)瀏覽器,以確認(rèn)我們的數(shù)據(jù)庫不包含重復(fù)節(jié)點的CreditCard

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



步驟2 -在數(shù)據(jù)瀏覽器中的美元提示符下鍵入以下命令。
CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE


CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
然后它成功地對number屬性創(chuàng)建UNIQUE約束。


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

我們可以觀察到一個約束被添加到數(shù)據(jù)庫。


這里我們在CreditCard節(jié)點的number屬性上創(chuàng)建了一個UNIQUE約束。 因為根據(jù)我們的客戶要求,CreditCard號碼應(yīng)該是唯一的。


如果應(yīng)用程序嘗試插入重復(fù)的CreditCard號碼,Neo4j DB服務(wù)器將會拋出一個錯誤,表示數(shù)據(jù)庫中已存在相同的數(shù)字。


示例-

此示例演示如何檢查CreditCard節(jié)點的number屬性上的UNIQUE約束是否正常工作。


步驟1 -在數(shù)據(jù)瀏覽器中的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 -點擊執(zhí)行按鈕,觀察結(jié)果。


CreditCard節(jié)點
我們可以觀察到數(shù)據(jù)庫包含3個CreditCard節(jié)點。


步驟3 -在數(shù)據(jù)瀏覽器中的dollar提示符下鍵入以下命令。

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


命令


步驟4 -點擊執(zhí)行按鈕,觀察結(jié)果。


唯一約束
這表明,創(chuàng)建具有相同CreditCard.number的重復(fù)節(jié)點是不可能的,因為它有唯一約束


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號