关于 YMatrix
部署数据库
使用数据库
管理集群
最佳实践
高级功能
高级查询
联邦查询
Grafana 监控
备份恢复
灾难恢复
图数据库
管理手册
性能调优
故障诊断
工具指南
系统配置参数
SQL 参考
CREATE 子句用于创建图的顶点和边。
注意!
在 YMatrix AGE 中,同一个 cypher 函数包含的 CREATE 子句创建的所有点、边都会在同一个Segment上。
不跟随其他子句的 CREATE 子句称为终端子句。当 Cypher 查询以终端子句结尾时,cypher 函数调用不会返回任何结果。但是,cypher 函数调用仍然需要列定义列表as (a agtype)。当 cypher 以终端节点结尾时,在列定义列表中定义一个值即可:该变量不会返回任何数据。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE /* 此处为 Create 子句,后面没有其他子句 */
$$) as (a agtype);
| a |
|---|
| 返回 0 行 |
通过以下查询创建单个顶点。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (n)
$$) as (v agtype);
此查询不返回任何内容。
v
---
(0 rows)
通过逗号分隔来创建多个顶点。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (n), (m)
$$) as (v agtype);
结果
v
---
(0 rows)
创建顶点时添加标签,使用以下语法:
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (:Person)
$$) as (v agtype);
此查询不返回任何内容。
结果
v
---
(0 rows)
可以同时创建带标签和属性的顶点。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (:Person {name: 'Andres', title: 'Developer'})
$$) as (n agtype);
此查询不返回任何内容。
结果
n
---
(0 rows)
可以在同一查询中创建并返回节点:
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (a {name: 'Andres'})
RETURN a
$$) as (a agtype);
返回新创建的节点。
结果
a
--------------------------------------------------------------------------------
{"id": 281474976710660, "label": "", "properties": {"name": "Andres"}}::vertex
(1 row)
要创建一个顶点指向自身的边(边的startid 和 endid相同),有两种创建方式。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE (a)-[e:RELTYPE]->(a)
RETURN e
$$) as (e agtype);
结果
e
-------------------------------------------------------------------------------------------------------------------------------
{"id": 28428972647776257, "label": "RELTYPE", "end_id": 281474976710661, "start_id": 281474976710661, "properties": {}}::edge
(1 row)
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person)
CREATE (a)-[e:RELTYPE]->(a)
RETURN e
$$) as (e agtype);
结果
e
---------------------------------------------------------------------
{id: 0; startid: 0, endid: 0; label: 'RELTYPE'; properties: {}}::edge
(1 row)
要在两个顶点之间创建边,首先使用 MATCH 匹配这两个顶点,然后在它们之间创建边。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person), (b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[e:RELTYPE]->(b)
RETURN e
$$) as (e agtype);
查询返回创建的边。
结果
| e |
|---|
| {id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {}}::edge |
| (1 row) |
在边上设置属性的方式与在创建顶点时设置属性类似。注意,值可以是任意表达式。
查询
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person), (b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b)
RETURN e
$$) as (e agtype);
查询返回新创建的边。
结果
| e |
|---|
| {id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {name: 'Node A<->Node B'}}::edge |
| (1 row) |
使用 CREATE 和模式时,所有在当前作用域中不存在的部分都将被创建。
查询
SELECT *
FROM cypher('graph_name', $$
CREATE p = (andres {name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael {name:'Michael'})
RETURN p
$$) as (p agtype);
此查询同时创建三个节点和两个关系,将模式赋值给路径变量,并返回该模式。
结果
| p |
|---|
| [{id:0; label: ''; properties:{name:'Andres'}}::vertex, {id: 3; startid: 0, endid: 1; label: 'WORKS_AT'; properties: {}}::edge, {id:1; label: ''; properties: }::vertex, {id: 3; startid: 2, endid: 1; label: 'WORKS_AT'; properties: {}}::edge, {id:2; label: ''; properties: {name:'Michael'}}::vertex]::path |
| (1 row) |