概览
INSERT OVERWRITE语句用于覆盖图中已有的点和边。如果未找到匹配的现有数据,则会插入新的点或边。
在类型图中,每个点或边只属于一个Schema,且插入后Schema不可更改。尝试给现有的点、边指定不同的Schema将导致错误。覆盖点或边时,新定义中包含的属性会被更新,而未包含的属性将被设为null。
在开放图中,当点或边被覆盖时,其标签和属性都会被更新。
覆盖点
如果属性定义中包含_id,且其值在图中已存在,则对应点将被覆盖。例如:
INSERT OVERWRITE (:User {_id: "U2", name: "Jumpy88"})
如果图中已存在_id为U2的点,该节点的Schema/标签和属性将被新的值覆盖。如果不存在这样的点,则会插入一个新点。
INSERT OVERWRITE (:User {name: "Jumpy88"})
由于属性定义中未包含_id,因此会在图中插入一个新点。
覆盖边
如果属性定义中包含EDGE KEY属性,且其值在图中已存在,同时指定的起点和终点保持不变,则对应边将被覆盖。
例如,将EDGE KEY约束应用于属性eID:
ALTER EDGE * ADD CONSTRAINT EDGE KEY ON eID STRING
MATCH (n1:User {name: "mochaeach"}), (n2:User {name: "Brainy"})
INSERT OVERWRITE (n1)-[e:Follows {eID: "e6561"}]->(n2)
如果图中已存在eID为e6561的边,且其起点和终点分别为mochaeach和Brainy,则该边的Schema/标签和属性将被新的值覆盖。如果不存在这样的边,则会插入一条新边。