概述
DELETE
语句用于删除图中的点、边。使用前,需先使用MATCH
语句获取待删除的点、边数据。
<delete statement> ::=
[ "DETACH" | "NODETACH"] "DELETE" <delete item> [ { "," <delete item> }... ]
<delete item> ::=
<graph element variable reference>
如果一条边的某个端点从图中被删除,这条边也无法继续存在。默认情况下,GQL不允许删除仍有边相连的点。不过,你可以使用关键词DETACH
绕过这个限制,在删除点的同时删除与其相连的边。例如,使用DETACH DELETE
删除点B
后,边1
、2
和4
也将被删除。

使用DELETE
或NODETACH DELETE
时,无法删除点B
。这可以作为一种避免误删的安全措施。
如果没有指定DETACH
或NODETACH
,隐式应用DEDETACH
。
示例图

CREATE GRAPH myGraph {
NODE User ({name string}),
NODE Club (),
EDGE Joins ()-[{}]->()
} PARTITION BY HASH(Crc32) SHARDS [1]
INSERT (rowlock:User {_id: "U01", name: "rowlock"}),
(brainy:User {_id: "U02", name: "Brainy"}),
(mochaeach:User {_id: "U03", name: "mochaeach"}),
(purplechalk:User {_id: "U04", name: "purplechalk"}),
(lionbower:User {_id: "U05", name: "lionbower"}),
(c:Club {_id: "C01"}),
(rowlock)-[:Follows]->(brainy),
(mochaeach)-[:Follows]->(brainy),
(brainy)-[:Joins]->(c)
删除孤点
删除孤点purplechalk
和lionbower
:
MATCH (n:User) WHERE n.name IN ["purplechalk", "lionbower"]
DELETE n
[NODETACH] DELETE
语句只能删除孤点,如果待删除的点仍有边相连,会引发报错且不会删除任何点。
删除任意点
删除点rowlock
及与其相连的边:
MATCH (n:User {name: 'rowlock'})
DETACH DELETE n
删除所有点和边
删除所有点,同时删除所有边:
MATCH (n)
DETACH DELETE n
删除边
删除所有Follows
边:
MATCH ()-[e:Follows]->()
DELETE e
限制删除数量
在MATCH
后使用LIMIT
语句,只保留变量的前N条记录,即可限制后续删除的点、边数量。
删除两条边:
MATCH ()-[e]->() LIMIT 2
DELETE e
RETURN e
结果:e
_uuid |
_from |
_to |
_from_uuid | _to_uuid | schema |
values |
---|---|---|---|---|---|---|
Sys-gen | U02 | C01 | UUID of U02 | UUID of C01 | Joins | |
Sys-gen | U01 | U02 | UUID of U01 | UUID of U02 | Follows |