跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

DELETE

DELETE语句用于删除一个或多个图或临时图中的元素。

使用说明

当执行DELETE语句删除图元素时,系统采用逻辑删除机制:数据不会立即从 Storage 服务中物理移除,而是被标记为“已删除”状态;标记为已删除的数据在查询结果中自动过滤,不会返回给用户;已删除数据会在后台的 RocksDB Compaction(数据压缩)过程中进行物理清理来释放磁盘空间。

Note

对非默认 Schema 或其中的对象执行操作时,用户既要通过隐式访问规则或显式USAGE授权获得该 Schema 的访问权,也要具备目标操作所需的权限。Schema 访问校验和目标操作所需的权限校验相互独立,满足其中一项不能替代另一项。Schema 访问控制不适用于临时图、内置 Procedure 和内置 Function。更多信息,请参见 Schema 访问控制。

前提条件

  • 已创建图或临时图。更多信息,请参见 CREATE GRAPH 和 CREATE TEMPORARY GRAPH。
  • 若要删除图中的元素,须具备在当前 Schema 执行DELETE ANY GRAPH操作的权限,或具备在当前图中执行DELETE操作的权限。更多信息,请参见角色与权限。
  • 若要删除临时图中的元素,必须是具备角色ADMIN的用户或临时图的所有者。

语法

delete_statement
DETACH NODETACH DELETE value_expression ,

delete_statement ::=
    ( 'DETACH' | 'NODETACH' )? 'DELETE' value_expression ( ',' value_expression )*

参数

DETACH | NODETACH

指定是删除点及其连接的边,还是仅删除点。

  • DETACH:删除点及其连接的边。
  • NODETACH:仅删除点。当删除有连接边的点时,系统会报错。如果未指定DETACH或NODETACH,则默认使用NODETACH。

value_expression

要删除的图元素(点或/和边)的值表达式。更多信息,请参见值表达式。

示例

以下示例基于示例数据集。

删除点

'''
// 插入一个点。
USE movie INSERT (a@Actor{id:10000, name: "Tom Hanks", birthDate: date("1956-07-09")})
'''

'''
// 删除该点。
USE movie MATCH (a@Actor{id:10000}) DELETE a
'''

删除边

'''
USE movie 
MATCH (a@Actor{name:"Mila Parély"})-[e@Act]->(b@Movie{name:"Beauty and the Beast"}) 
DELETE e
'''

上述语句删除了连接点a和点b的边-[e@Act]->。

删除点和边

'''
USE movie 
MATCH (a@Actor{name:"Nane Germon"})-[e@Act]->(b@Movie{name:"Beauty and the Beast"}) 
DELETE a, e
'''

上述语句删除了点(a@Actor{name:"Nane Germon"})和点a和b之间的边-[e@Act]->。

使用DETACH DELETE删除点及所有连接的边

'''
USE movie 
MATCH (a@Actor{name:"Josette Day"}) 
DETACH DELETE a
'''

上述语句删除了点(a@Actor{name:"Josette Day"})及所有该点连接的边。

删除所有点和边

USE movie MATCH (a) DETACH DELETE a

上述语句删除了图movie中的所有点和边。

使用表变量批量删除点

'''
TABLE t { id } =  
    ( 10001 ),  
    ( 10002 ),  
    ( 10003 )  
USE movie 
FOR re IN t 
MATCH (a@Actor) WHERE a.id = re.id 
DETACH DELETE a
'''

上述语句定义了表变量t,并基于表变量的字段id匹配点类型为Actor的点。然后,删除匹配到的点及与其连接的所有边。

关于使用表变量进行批量操作的更多信息,请参见定义表变量。