跳转至

INSERT VERTEXGraph

INSERT VERTEX语句可以在NebulaGraph实例的指定图空间中插入(覆盖)一个或多个点。

前提条件Graph

执行INSERT VERTEX语句需要当前登录的用户拥有指定图空间的Graph,否则会报错。

语法Graph

INSERT VERTEX <tag_name> (<prop_name_list>) [, <tag_name> (<prop_name_list>), ...]
     {VALUES | VALUE} VID: (<prop_value_list>[, <prop_value_list>])

prop_name_list:
  [prop_name [, prop_name] ...]

prop_value_list:
  [prop_value [, prop_value] ...]
  • tag_name:点关联的标签(点类型)。标签必须提前创建,详情请参见Graph。
  • prop_name_list:需要设置的属性名称列表。
  • VID:点ID。在NebulaGraph 2.0中支持字符串和整数,需要在创建图空间时设置,详情请参见Graph。
  • prop_value_list:根据prop_name_list填写属性值。如果属性值和标签中的数据类型不匹配,会返回错误。如果没有填写属性值,而标签中对应的属性设置为NOT NULL,也会返回错误。详情请参见Graph。

Caution

INSERT VERTEX 与 openCypher 中 CREATE 的语意不同

  • INSERT VERTEX 语意更接近于 NoSQL(Key-value) 方式的 INSERT 语意,或者 SQL 中的 UPSERT (UPDATE or INSERT)
  • 相同 VIDTAG 的情况下:新写入会覆盖旧写入,不存在时会新写入。
  • 相同 VID 但不同 TAG 的情况下:不同TAG对应的记录不会相互覆盖,不存在会新写入。

参考以下示例。

示例Graph

# 插入不包含属性的点。
nebula> CREATE TAG t1();                   
nebula> INSERT VERTEX t1() VALUE "10":(); 
nebula> CREATE TAG t2 (name string, age int);                
nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n1", 12);

# 创建失败,因为"a13"不是int类型。
nebula> INSERT VERTEX t2 (name, age) VALUES "12":("n1", "a13"); 

# 一次插入2个点。
nebula> INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8); 
nebula> CREATE TAG t3(p1 int);
nebula> CREATE TAG t4(p2 string);

# 一次插入两个标签的属性到同一个点。
nebula> INSERT VERTEX  t3 (p1), t4(p2) VALUES "21": (321, "hello");

一个点相同TAG可以多次插入属性值,以最后一次为准。

# 多次插入属性值。
nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n2", 13);
nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n3", 14);
nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n4", 15);
nebula> FETCH PROP ON t2 "11";
+---------------------------------+
| vertices_                       |
+---------------------------------+
| ("11" :t2{age: 15, name: "n4"}) |
+---------------------------------+
nebula> CREATE TAG t5(p1 fixed_string(5) NOT NULL, p2 int, p3 int DEFAULT NULL);
nebula> INSERT VERTEX t5(p1, p2, p3) VALUES "001":("Abe", 2, 3);

# 插入失败,因为属性p1不能为NULL。
nebula> INSERT VERTEX t5(p1, p2, p3) VALUES "002":(NULL, 4, 5);
[ERROR (-8)]: Storage Error: The not null field cannot be null.

# 属性p3为默认值NULL。
nebula> INSERT VERTEX t5(p1, p2) VALUES "003":("cd", 5);
nebula> FETCH PROP ON t5 "003";
+--------------------------------------------+
| vertices_                                  |
+--------------------------------------------+
| ("003" :t5{p1: "cd", p2: 5, p3: __NULL__}) |
+--------------------------------------------+

# 属性p1最大长度为5,因此会被截断。
nebula> INSERT VERTEX t5(p1, p2) VALUES "004":("shalalalala", 4);
nebula> FETCH PROP on t5 "004";
+-----------------------------------------------+
| vertices_                                     |
+-----------------------------------------------+
| ("004" :t5{p1: "shala", p2: 4, p3: __NULL__}) |
+-----------------------------------------------+

最后更新: 2021年6月1日
Back to top