
# 软删除概述
#### 背景
软删除（Soft Delete）是相对于硬删除（Hard Delete）而言的，它又可以叫做逻辑删除或者标记删除。
这种删除方式并不是真正地从数据库中把记录删除，而是通过特定标记在查询时将此记录过滤掉。虽然数据在应用界面或者API查询时候已不可见，但是仍保留在数据库中。
#### 原理
AstroPro实现软删除的原理是在需要进行软删除的对象上额外生成一个（**\`soft_delete_flag\` bigint(20) NOT NULL DEFAULT '0'**）的字段。
- soft_delete_flag = 0表明当前数据没有被删除。
- 当进行软删除操作时，soft_delete_flag会被更新成被删除时的时间戳。
 
#### 使用说明
在编辑服务时，业务设计界面选中需要进行软删除的对象，勾选软删除策略和恢复软删除后生成代码，如下所示：
图1设置软删除策略   
![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002192611066.png "点击放大")
- 当勾选了"软删除策略"后，生成的代码会有如下变化：
  - 在勾选软删除策略的对象上会额外生成一个字段 （**\`soft_delete_flag\` bigint(20) NOT NULL DEFAULT '0'**）。
  
  - 删除和批量删除的API上会额外生成一个Boolean类型的参数**hardDeletion** ，在调用删除相关API时，如果**hardDeletion**传入true则进行物理删除，否则进行逻辑删除。
  
  - 查询API上会额外生成一个Boolean类型的参数softDeleted，当不传入softDeleted或softDeleted传入false的时候，只查询未被删除数据（soft_delete_flag = 0 的数据）。当softDeleted参数为true时，查询将仅基于主键进行，忽略soft_delete_flag的值。
  
  - 批量查询API中soft_delete_flag字段会作为一个非必填的参数添加到请求参数中。
   
- 当勾选了"恢复软删除"后，生成的代码会有如下变化： 额外生成两个API，一个是单条数据的恢复软删除（将被删除的数据的soft_delete_flag重新设置为0），一个是批量数据的恢复软删除。
  
 
