概述
INSERT
语句通过模式向图中插入新的点和边。
在开放图中,你可以直接插入点和边,系统会自动创建相应的Schema和属性。创建属性时,它的值类型是根据提供的第一个值推断而来的,示例如下:
示例值 | 描述 | 推断的属性值类型 |
---|---|---|
-20 , 1315 |
-9,223,372,036,854,775,808 到9,223,372,036,854,775,806 范围内的整数 |
INT64 |
100000000000000001 |
9,223,372,036,854,775,807 到18,446,744,073,709,551,614 范围内的整数 |
UINT64 |
18.25 |
最多包含15位有效数字的小数 | DOUBLE |
"graph database" |
最大长度为60,000 字节的字符串 |
STRING |
"graph database is ..." |
长度超过60,000 字节的字符串 |
TEXT |
date("1993-05-09") |
date() 函数返回值 |
DATE |
local_datetime("1993-05-09 03:02:11") |
local_datetime() 函数返回值 |
LOCAL DATETIME |
local_time("03:02:11") |
local_time() 函数返回值 |
LOCAL TIME |
zoned_datetime("1993-05-09T03:02:11-0600") |
zaoned_datetime() 函数返回值 |
ZONED DATETIME |
zoned_time("03:02:11-06:00") |
zoned_time() 函数返回值 |
ZONED TIME |
TRUE , FALSE |
布尔值 | BOOL |
point({latitude:39.9, longitude:116.3}) |
point() 函数返回值 |
POINT |
["tennis", "football", "swimming"] |
构建的列表 | LIST |
另一方面,在类型图中,插入的点和边都必须符合定义的图类型——如果指定的Schema或属性尚未定义,就无法插入。
准备图
我们将使用开放图示例如何插入点和边。创建一个名为myGraph
的开放图:
CREATE GRAPH myGraph ANY
在类型图中插入点、边的语法与开放图是相同的,但需保证指定的点、边Schema和属性在图中已定义。
插入点
使用点模式插入点,每个点模式包含:
- 点变量声明(可选):如果需要返回插入的点或在后续查询语句中使用该点,可为点声明一个变量。
- 标签表达式(必须):必须为点指定一个标签(即Schema名)。
- 属性赋值(可选):为点的属性赋值,注意:
- 点的
_id
值若未指定,将由系统自动生成;也可手动为其指定唯一值。 - 点的
_uuid
值由系统自动生成,不允许手动指定。 - 如果指定的标签在图中已存在,没有赋值的属性默认值为
null
。
- 点的
插入一个User
点和两个Club
点,并返回它们:
INSERT (n1:User {_id: "U01", name: "Quasar92"}), (n2:Club {_id: "C01"}), (n3:Club {since: 2007})
RETURN n1, n2, n3
结果:
+-----+---------------------+--------+----------+
| _id | _uuid | Schema | name |
+-----+---------------------+--------+----------+
| U01 | 9223375335389659138 | User | Quasar92 |
+-----+---------------------+--------+----------+
+-----+---------------------+--------+-------+
| _id | _uuid | Schema | since |
+-----+---------------------+--------+-------+
| C01 | 4755803405526499330 | Club | null |
+-----+---------------------+--------+-------+
+--------------------------+----------------------+--------+-------+
| _id | _uuid | Schema | since |
+--------------------------+----------------------+--------+-------+
| 68ad5fa400000001d4000005 | 11961562809319292931 | Club | 2007 |
+--------------------------+----------------------+--------+-------+
插入另一个User
点:
INSERT (:User {_id: "U02", name: 'mochaeach', gender: 'female'})
目前,系统已经自动创建了两个点Schema:
User
点Schema,它关联两个属性:name
(STRING
类型)和gender
(STRING
类型)Club
点Schema,它关联一个属性:since
(INT64
类型)
插入边
使用路径模式插入边,其中每个边模式两端都有点模式,边模式必须包含方向以明确边起点和终点。每个边模式包含:
- 边变量声明(可选):如果需要返回插入的边或在后续查询语句中使用该边,可为点声明一个变量。
- 标签表达式(必须):必须为边指定一个标签(即Schema名)。
- 属性赋值(可选):为边的属性赋值,注意:
- 边的
_uuid
值由系统自动生成,不允许手动指定。 - 边的
_from
、_to
、_from_uuid
和_to_uuid
值从指定的起点和终点获得,不允许手动指定。 - 如果指定的标签在图中已存在,没有赋值的属性默认值为
null
。
- 边的
插入边时,可以将边连接到图中已存在的点,或同时插入边及其起点和终点。
同时插入起点、终点
插入三个User
点,并在它们中间插入两条Follows
边:

INSERT (:User {name: 'rowlock'})-[:Follows {createdOn: '2024-01-05'}]->(:User {name: 'Brainy', gender: 'male'})<-[:Follows {createdOn: '2024-02-01'}]-(:User {name: 'purplechalk', gender: 'female'})
连接到已存在的点
插入并返回一条Joins
边,它的起点和终点通过前置的MATCH
语句找到并与变量n1
和n2
绑定:

MATCH (n1:User {_id: 'U01'}), (n2:Club {_id: 'C01'})
INSERT (n1)-[e:Joins {memberNo: 1}]->(n2)
RETURN e
结果:e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
3 | U01 | C01 | 9223375335389659138 | 4755803405526499330 | Joins | {memberNo: 1} |
插入相交路径
通过重复利用变量c02
插入两条相交的路径:

INSERT (:User {_id: 'U06', name: 'waveBliss'})-[:Joins {memberNo: 1}]->(c02:Club {_id: 'C02'})<-[:Joins {memberNo: 2}]-(:User {_id: 'U07', name: 'bella', gender: 'female'}),
(:User {_id: 'U08', name: 'Roose'})-[:Joins {memberNo: 3}]->(c02)