INSERT EDGE

INSERT EDGE语句可以在Nebula Graph实例的指定图空间中插入一条或多条边。边是有方向的,从起始点(src_vid)到目的点(dst_vid)。

INSERT EDGE的执行方式为覆盖式插入。如果已有Edge type、起点、终点、rank都相同的边,则覆盖原边。

语法

  1. INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) {VALUES | VALUE}
  2. <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )
  3. [, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];
  4. <prop_name_list> ::=
  5. [ <prop_name> [, <prop_name> ] ...]
  6. <prop_value_list> ::=
  7. [ <prop_value> [, <prop_value> ] ...]
  • IF NOT EXISTS:用户可以使用IF NOT EXISTS关键字检测待插入的边是否存在,只有不存在时,才会插入。

  • <edge_type>:边关联的Edge type,只能指定一个Edge type。Edge type必须提前创建,详情请参见CREATE EDGE

  • <prop_name_list>:需要设置的属性名称列表。

  • src_vid:起始点ID,表示边的起点。

  • dst_vid:目的点ID,表示边的终点。

  • rank:可选项。边的rank值。默认值为0。rank值可以用来区分Edge type、起始点、目的点都相同的边。

  • <prop_value_list>:根据prop_name_list填写属性值。如果属性值和Edge type中的数据类型不匹配,会返回错误。如果没有填写属性值,而Edge type中对应的属性设置为NOT NULL,也会返回错误。详情请参见CREATE EDGE

示例

  1. # 插入不包含属性的边。
  2. nebula> CREATE EDGE e1();
  3. nebula> INSERT EDGE e1 () VALUES "10"->"11":();
  4. # 插入rank为1的边。
  5. nebula> INSERT EDGE e1 () VALUES "10"->"11"@1:();
  1. nebula> CREATE EDGE e2 (name string, age int);
  2. nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 1);
  3. # 一次插入2条边。
  4. nebula> INSERT EDGE e2 (name, age) VALUES \
  5. "12"->"13":("n1", 1), "13"->"14":("n2", 2);
  6. # 创建失败,因为"a13"不是int类型。
  7. nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", "a13");

一条边可以多次插入属性值,以最后一次为准。

  1. # 多次插入属性值。
  2. nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 12);
  3. nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 13);
  4. nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 14);
  5. nebula> FETCH PROP ON e2 "11"->"13";
  6. +-------------------------------------------+
  7. | edges_ |
  8. +-------------------------------------------+
  9. | [:e2 "11"->"13" @0 {age: 14, name: "n1"}] |
  10. +-------------------------------------------+

使用IF NOT EXISTS插入已存在的边时,不会进行修改。

  1. # 插入边。
  2. nebula> INSERT EDGE e2 (name, age) VALUES "14"->"15"@1:("n1", 12);
  3. # 使用IF NOT EXISTS修改边,因为边已存在,不会进行修改。
  4. nebula> INSERT EDGE IF NOT EXISTS e2 (name, age) VALUES "14"->"15"@1:("n2", 13);
  5. nebula> FETCH PROP ON e2 "14"->"15"@1;
  6. +-------------------------------------------+
  7. | edges_ |
  8. +-------------------------------------------+
  9. | [:e2 "14"->"15" @1 {age: 12, name: "n1"}] |
  10. +-------------------------------------------+