我正在努力弄清楚MERGE和CREATE UNIQUE之间的区别。我知道以下特点:
#MERGE# 如果模式不存在,我可以创建节点。
这将创建一个具有名称属性的节点“n”,一个空节点“m”和关系RELATED。
#创建唯一# 我无法创建这样的节点。
如果存在节点“n”,则创建唯一的空节点“m”和关系RELATED。
如果存在这个模式,就不会创建任何东西,只会返回模式。
从我的角度来看,我认为MERGE和CREATE UNIQUE是相似的查询,但是使用CREATE UNIQUE无法在关系中创建起始节点。如果有人能够解释这个问题并比较这些查询,我将不胜感激。
#MERGE# 如果模式不存在,我可以创建节点。
MERGE (n { name:"X" }) RETURN n;
这将创建一个具有名称属性的节点“n”,一个空节点“m”和关系RELATED。
MERGE (n { name:"X" })-[:RELATED]->(m) RETURN n, m;
#创建唯一# 我无法创建这样的节点。
CREATE UNIQUE (n { name:"X" }) RETURN n;
如果存在节点“n”,则创建唯一的空节点“m”和关系RELATED。
MATCH (n { name: 'X' }) CREATE UNIQUE (n)-[:RELATED]->(m) RETURN n, m;
如果存在这个模式,就不会创建任何东西,只会返回模式。
从我的角度来看,我认为MERGE和CREATE UNIQUE是相似的查询,但是使用CREATE UNIQUE无法在关系中创建起始节点。如果有人能够解释这个问题并比较这些查询,我将不胜感激。
CREATE
要快得多。CREATE
只是简单地创建了您告诉它要创建的内容,而MERGE
则必须执行相当于MATCH
子句和高级锁定以确保没有其他人在同时创建相同的模式。但是,您可以通过创建一个MERGE
可依赖的唯一性约束条件来加速许多MERGE
语句。 - Jacob Davis-HanssonMERGE
并使其不具有原子性真的很糟糕:(在添加唯一索引后,我开始收到死锁错误,这再次让我感到困扰。所以,我的问题是:为什么我要在具有唯一约束条件的情况下使用MERGE
而不是CREATE
? - tugberk