数据库中的逻辑删除

逻辑删除是一种软删除的手段,它通过将数据的状态标记为已删除,而不是直接从数据库中删除数据。以下是逻辑删除的一般流程:

  1. 数据库设计:在数据库表中添加一个用于表示删除状态的字段,通常是一个布尔类型的列,比如is_deleted

  2. 标记为已删除:当需要删除数据时,而不是直接从数据库中删除,而是将is_deleted字段设置为真(1或true),表示该数据已被逻辑删除。

  3. 查询数据:在查询数据时,需要过滤掉已被逻辑删除的数据。查询语句通常会包含一个额外的条件,如WHERE is_deleted = false,这样只会返回未被逻辑删除的数据。

  4. 恢复数据:如果需要恢复被逻辑删除的数据,可以更新is_deleted字段为假(0或false)。

而在MyBatisPlus框架中,它可以自动帮我们实现逻辑删除。我们先来看一下MyBatisPlus官方文档:


说明:

只对自动注入的 sql 起效:

插入: 不作限制
查找: 追加 where 条件过滤掉已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
更新: 追加 where 条件防止更新到已删除数据,如果使用 wrapper.entity 生成的 where 条件也会自动追加该字段
删除: 转变为 更新
例如:

删除: update user set deleted=1 where id = 1 and deleted=0
查找: select id,name,deleted from user where deleted=0
字段类型支持说明:

支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()
附录:

逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。

#使用方法

#步骤 1: 配置com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig
例: application.yml
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
#步骤 2: 实体类字段上加上@TableLogic注解
@TableLogic
private Integer deleted;

逻辑删除的好处是,在删除数据时不会真正地删除它们,而是保留数据的历史记录。这有助于保留数据完整性以及提供恢复和审计功能,同时还可以避免误删数据的风险。然而,需要注意的是逻辑删除只是一种软删除方式,对于一些敏感数据或需要完全删除的情况,物理删除可能更合适。

总结:逻辑删除是一种不直接删除数据而是将其状态标记为已删除的方法。通过在数据库表中添加一个表示删除状态的字段,并在查询数据时过滤已被逻辑删除的数据,可以实现逻辑删除的效果。逻辑删除保留了数据的历史记录并提供了恢复和审计功能,但需要注意逻辑删除并非适用于所有情况,特定的业务需求可能需要考虑使用其他删除方式。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值