- 精通Neo4j
- 龐國明等
- 702字
- 2023-07-17 19:01:14
3.3.13 CREATE UNIQUE語句
CREATE UNIQUE語句相當于MATCH和CREATE的混合體—盡可能地匹配,然后創建未匹配到的。
提示:可能會想到用MERGE來代替CREATE UNIQUE,然而MERGE并不能很強地保證關系的唯一性。
3.3.13.1 簡介
CREATE UNIQUE介于MATCH和CREATE之間,其作用是匹配所能匹配得上的,創建不存在的。CREATE UNIQUE盡可能地減少對圖的改變,充分利用已有的圖。與MATCH的另外一個不同是,CREATE UNIQUE假設模式是唯一性的,如果有多個匹配的子圖可以找到,則此時將會報錯。
CREATE UNIQUE圖例如圖3-16所示。

圖3-16 CREATE UNIQUE圖例
3.3.13.2 創建唯一節點
1.創建未匹配到的節點
如果模式描述的節點未匹配到,則創建一個新節點。
查詢:

root節點沒有任何LOVES關系。因此,創建了一個節點及其與root節點的LOVES關系。
結果:

2.用含值的模式創建節點
描述的模式可以在節點中包含值,語法為prop: <expression>。
查詢:

沒有與root節點相連的name為D的節點,所以創建一個新的節點來匹配該模式。
結果:

3.創建未匹配到帶標簽的節點
如果描述的模式需要一個帶標簽的節點,而數據庫中沒有帶給定標簽的節點,Cypher將創建一個新的節點。
查詢:

與A節點相連的KNOWS關系有一個C節點,但C節點沒有blue標簽,那么將創建一個帶有blue標簽的節點和從A到它的KNOWS關系。
結果:

3.3.13.3 創建唯一關系
1.創建未匹配到的關系
CREATE UNIQUE用于描述應該被找到的或需要創建的模式。
查詢:

匹配一個左節點和兩個右節點之間的關系。其中一個關系已存在,因此能匹配到,然后創建了不存在的關系。
結果:

2.用含值的模式創建關系
創建模式中含值的關系。
查詢:

本例中希望關系有一個值,因為沒有這樣的關系匹配到,因此創建了一個新節點和關系。注意,因為不關心創建的節點,所以沒有對該節點命名。
結果:

3.3.13.4 描述復雜模式
就像MATCH和CREATE語句一樣,CREATE UNIQUE描述的模式也可以用逗號分隔。
查詢:

本例中的模式使用了兩條用逗號分隔的路徑。
結果:
