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
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的点。然后,删除匹配到的点及与其连接的所有边。
关于使用表变量进行批量操作的更多信息,请参见定义表变量。