DELETE

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

要删除属性和标签,请参阅 REMOVE 子句。

无法在不删除关系的情况下删除与其连接的节点。这可以通过显式删除特定关系,或使用 DETACH DELETE 子句来完成。

虽然 DELETE 子句使删除的对象不再可访问,但被删除节点和关系占用的空间仍保留在磁盘上,并保留用于将来创建数据的事务。有关如何清理和重用被删除对象所占用空间的信息,请参阅 操作手册 → 空间重用

示例图

以下图用于下面的示例。它展示了四位演员,其中三位在电影《黑客帝国》(基努·里维斯、凯瑞-安·莫斯和劳伦斯·菲什伯恩)中扮演了角色 (ACTED_IN),而一位演员(汤姆·汉克斯)没有参演。

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 子查询

使用 CALL 子查询删除所有节点和关系
MATCH (n)
CALL (n) {
 DETACH DELETE n
} IN TRANSACTIONS

要删除所有数据,包括索引和约束,请使用以下命令重新创建数据库:CREATE OR REPLACE DATABASE name

删除数据库并重新创建
CREATE OR REPLACE DATABASE neo4j
© . All rights reserved.