DELETE
DELETE 子句用于删除节点、关系或路径。
若要移除属性和标签,请参阅 REMOVE 子句。
如果节点上连接有关系,则无法直接删除该节点,除非同时删除这些关系。这可以通过显式删除特定关系,或使用 DETACH DELETE 子句来实现。
虽然 DELETE 子句会使被删除的对象不再可访问,但这些节点和关系所占用的空间仍保留在磁盘上,并留给后续创建数据的事务使用。有关如何清理和重用已删除对象所占空间的详细信息,请参阅 操作手册 → 空间重用。 |
示例图
下文示例使用以下图表。图中展示了四位演员,其中三位(Keanu Reeves、Carrie-Anne Moss 和 Laurence Fishburne)在电影 The Matrix 中 ACTED_IN(参演),另一位演员(Tom Hanks)未参演。
要重建该图,请在空的 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
仅删除关系
可以删除关系,同时不影响与该关系连接的节点。
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
|
具有受限安全权限的用户可能无法使用 |
删除所有节点和关系
可以删除图中的所有节点和关系。
MATCH (n)
DETACH DELETE n
Deleted 3 nodes, deleted 1 relationship
DETACH DELETE 在试验小型示例数据集时很有用,但不适合删除大量数据,也不会删除 索引 或任何 模式 (schema)。
若要删除大量数据而不删除索引和模式,请改用 事务中的 CALL 子查询。
CALL 子查询删除所有节点和关系MATCH (n)
CALL (n) {
DETACH DELETE n
} IN TRANSACTIONS
要移除所有数据(包括索引和约束),请使用以下命令重新创建数据库:CREATE OR REPLACE DATABASE name。
CREATE OR REPLACE DATABASE neo4j
有关详细信息,请参阅 操作手册 → 使用 IF NOT EXISTS 或 OR REPLACE 创建数据库。