DELETE

DELETE 子句用于删除节点、关系或路径。

有关删除属性和标签的信息,请参阅REMOVE 子句。

如果不也删除连接到它们的关联关系,则无法删除节点。这可以通过显式删除特定关联关系或使用DETACH DELETE 子句来完成。

虽然DELETE 子句使已删除的对象不再可访问,但已删除的节点和关联关系占用的空间仍保留在磁盘上,并为将来创建数据的交易保留。

示例图

下图用于下面的示例。它显示了四位演员,其中三位ACTED_IN电影The MatrixKeanu ReevesCarrie-Anne MossLaurence Fishburne),还有一位演员没有参演(Tom Hanks)。

graph delete clause

要重新创建该图,请在空的 Neo4j 数据库中运行以下查询

CREATE
  (keanu:Person {name: 'Keanu Reever'}),
  (laurence:Person {name: 'Laurence Fishburne'}),
  (carrie:Person {name: 'Carrie-Anne Moss'}),
  (tom:Person {name: 'Tom Hanks'}),
  (theMatrix:Movie {title: 'The Matrix'}),
  (keanu)-[:ACTED_IN]->(theMatrix),
  (laurence)-[:ACTED_IN]->(theMatrix),
  (carrie)-[:ACTED_IN]->(theMatrix)

删除单个节点

要删除单个节点,请使用DELETE 子句

查询
MATCH (n:Person {name: 'Tom Hanks'})
DELETE n

这将删除Person 节点Tom Hanks。此查询只能在没有连接任何关联关系的节点上运行。

结果
Deleted 1 node

NODETACH 关键字

也可以使用NODETACH DELETE 子句删除单个节点。使用NODETACH 关键字明确定义关联关系不会从节点分离和删除。NODETACH 关键字是已存在关键字DETACH的镜像,它是作为 Cypher®GQL 一致性的一部分引入的。包含它在功能上与使用简单的DELETE 相同。

查询
MATCH (n:Person {name: 'Tom Hanks'})
NODETACH DELETE n

这也将删除Person 节点Tom Hanks

仅删除关联关系

可以删除关联关系,同时使连接到该关联关系的节点不受影响。

查询
MATCH (n:Person {name: 'Laurence Fishburne'})-[r:ACTED_IN]->()
DELETE r

这将删除Person 节点Laurence Fishburne的所有传出ACTED_IN 关联关系,而不会删除该节点。

结果
Deleted 1 relationship

删除节点及其所有关联关系

要删除节点和连接到它们的任何关联关系,请使用DETACH DELETE 子句。

查询
MATCH (n:Person {name: 'Carrie-Anne Moss'})
DETACH DELETE n

这将删除Person 节点Carrie-Anne Moss 及其连接的所有关联关系。

结果
Deleted 1 node, deleted 1 relationship

对于具有受限安全权限的用户,可能不允许使用DETACH DELETE 子句。有关更多信息,请参阅操作手册→细粒度访问控制

删除所有节点和关联关系

可以删除图中的所有节点和关联关系。

查询
MATCH (n)
DETACH DELETE n
结果
Deleted 3 nodes, deleted 1 relationship

DETACH DELETE 不适合删除大量数据,但在使用小型示例数据集进行实验时很有用。要删除大量数据,请改用事务中的 CALL 子查询