Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dml/delete/ Documentation version: v5.3.2 # DELETE `DELETE`语句用于删除一个或多个图或临时图中的元素。 ## 使用说明 当执行`DELETE`语句删除图元素时,系统采用逻辑删除机制:数据不会立即从 Storage 服务中物理移除,而是被标记为“已删除”状态;标记为已删除的数据在查询结果中自动过滤,不会返回给用户;已删除数据会在后台的 [RocksDB Compaction(数据压缩)](https://github.com/facebook/rocksdb/wiki/Compaction)过程中进行物理清理来释放磁盘空间。 Note 对非默认 Schema 或其中的对象执行操作时,用户既要通过隐式访问规则或显式`USAGE`授权获得该 Schema 的访问权,也要具备目标操作所需的权限。Schema 访问校验和目标操作所需的权限校验相互独立,满足其中一项不能替代另一项。Schema 访问控制不适用于临时图、内置 Procedure 和内置 Function。更多信息,请参见 [Schema 访问控制](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/schema-access-control/)。 ## 前提条件 - 已创建图或临时图。更多信息,请参见 [CREATE GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph/create/) 和 [CREATE TEMPORARY GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-projection/create/)。 - 若要删除图中的元素,须具备在当前 Schema 执行`DELETE ANY GRAPH`操作的权限,或具备在当前图中执行`DELETE`操作的权限。更多信息,请参见[角色与权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/)。 - 若要删除临时图中的元素,必须是具备角色`ADMIN`的用户或临时图的所有者。 ## 语法 语法图源码 delete_statement ```` delete_statement ::= ( 'DETACH' | 'NODETACH' )? 'DELETE' value_expression ( ',' value_expression )* ```` ## 参数 ### `DETACH | NODETACH` 指定是删除点及其连接的边,还是仅删除点。 - `DETACH`:删除点及其连接的边。 - `NODETACH`:仅删除点。当删除有连接边的点时,系统会报错。如果未指定`DETACH`或`NODETACH`,则默认使用`NODETACH`。 ### `value_expression` 要删除的图元素(点或/和边)的值表达式。更多信息,请参见[值表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/#_6)。 ## 示例 以下示例基于[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)。 ### 删除点 ```` ''' // 插入一个点。 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`的点。然后,删除匹配到的点及与其连接的所有边。 关于使用表变量进行批量操作的更多信息,请参见[定义表变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/table-variable/)。