概述
INSERT
语句可以通过路径模式向图中插入新的点和边。语句支持插入独立的图元素和路径,因为路径本质上是由边连接的点序列。
数据插入过程中无法创建标签和属性。插入数据前需确认指定的标签和属性在图集中已存在。请参阅UQL的Schema和属性了解如何管理标签(即UQL的schema)和属性。
<insert statement> ::=
"INSERT" <insert path pattern> [ { "," <insert path pattern> }... ]
<insert path pattern> ::=
<insert node pattern> [ { <insert edge pattern> <insert node pattern> }... ]
<insert node pattern> ::= "(" [ <insert element pattern filler> ] ")"
<insert edge pattern> ::=
"<-[" [ <insert element pattern filler> ] "]-"
| "-[" [ <insert element pattern filler> ] "->"
<insert element pattern filler> ::=
<element variable declaration> [ <label and property specification> ]
| [ <element variable declaration> ] <label and property specification>
<label and property specification> ::=
<label expression> [ "{" <property key value pair list> "}" ]
详情
- 必须为每个点或每条边指定标签。
- 点的
_id
值若未指定,将由系统自动生成;可根据需要自定义该值。 - 点和边的
_uuid
值由系统自动生成,无法手动指定。 - 声明时,必须将起始点的点模式分别置于边模式的两边,并指明边的方向。
示例图结构
以下示例根据该图集运行:
在空图集中运行以下语句创建示例图集:
// 创建schema(标签)
create().node_schema("User").node_schema("Club").edge_schema("Follows").edge_schema("Joins")
// 创建属性
create().node_property(@User, "name").node_property(@User, "gender").edge_property(@Follows, "createdOn", datetime).edge_property(@Joins, "memberNo", uint32)
插入单个点
无需使用点模式即可插入单个点。必须为每个点分配标签,为系统属性_id
(string类型)指定独一无二的值,可选择是否为自定义属性赋值。
本条查询插入两个点:为第一个点指定标签User
和属性_id
和name
的值;为第二个点指定标签Club
和属性_id
的值。
INSERT (:User {_id: "U01", name: 'Quasar92'}), (:Club {_id: "C01"})
本条查询插入单个点,将其与变量mochaeach
绑定,并返回该点。
INSERT (mochaeach:User {_id: "U02", name: 'mochaeach', gender: 'female'})
RETURN mochaeach
结果:mochaeach
_id | _uuid | schema | values |
---|---|---|---|
U02 | Sys-gen | User | {name: "mochaeach", gender: "female"} |
插入边
边只能通过路径模式插入,其中每个完整的边模式两端都有点模式,且必须包含边方向,以明确路径的起点和终点。必须为每条边指定标签,可选择是否为自定义属性指定属性值。
插入边时,可以插入起终点,也可将边与现存点连接。
插入边和对应端点
本条语句插入三个标签为User
的点和两条标签为Follows
的边。
INSERT (:User {_id: 'U03', name: 'rowlock'})-[:Follows {createdOn: '2024-1-5'}]->(:User {_id: 'U04', name: 'Brainy', gender: 'male'})<-[:Follows {createdOn: '2024-2-1'}]-(:User {_id: 'U05', name: 'purplechalk', gender: 'female'})
将边与现存点连接
本条查询插入并返回标签为Joins
的边,并通过前置MATCH
语句找到起终点,分别将其与变量n1
和n2
绑定。
MATCH (n1:User {_id: 'U04'}), (n2:Club {_id: 'C01'})
INSERT (n1)-[e:Joins {memberNo: 1}]->(n2)
RETURN e
结果:e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | U04 | C01 | UUID of U04 | UUID of C01 | 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)