DELETE
DELETE
子句用于删除节点、关系或路径。
要删除属性和标签,请参阅 REMOVE 子句。
无法在不删除关系的情况下删除与其连接的节点。这可以通过显式删除特定关系,或使用 DETACH DELETE
子句来完成。
虽然 DELETE 子句使删除的对象不再可访问,但被删除节点和关系占用的空间仍保留在磁盘上,并保留用于将来创建数据的事务。有关如何清理和重用被删除对象所占用空间的信息,请参阅 操作手册 → 空间重用。 |
示例图
以下图用于下面的示例。它展示了四位演员,其中三位在电影《黑客帝国》(基努·里维斯、凯瑞-安·莫斯和劳伦斯·菲什伯恩)中扮演了角色 (ACTED_IN
),而一位演员(汤姆·汉克斯)没有参演。
要在空的 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
要删除大量数据而不删除索引和约束,请改为使用事务中的 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
创建数据库。