本章导学:
- 什么是逻辑删除?
- 为什么要使用逻辑删除
- 基于SpringBoot实现逻辑删除
- 为实体类新增逻辑删除属性
- 同步数据库新增列名delete
一、什么是逻辑删除
所谓逻辑删除,并不是真正意义上的删除,数据还是存在于数据库中只是对外不可见了而已。
而物理删除,则是把数据从磁盘上真正的删除了(delete on disc,找不回来啦~)
注意:
- 逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。
- 如果你需要频繁查出来看就不应使用逻辑删除,而是以一个状态去表示。
二、为什么要使用逻辑删除
我们看以下一个场景:
小王从公司离职了,此时公司的数据库里把有关小王的信息全都清除掉了。但是在月末老板对账的时候,发现流水对不上啦,因为小王为公司带来的流水数据也一同被删除掉了。
为了防止这种情况的出现,我们可以为员工表在增加一个字段delete(1代表被删除,0代表没删除)
这样我们的业绩流水就可以对上了,后续如果我们查看员工表还是按照select * from employer这样去查,本来离职的小王也会被查询出来。所以此时我们要多加一个条件后再去进行查询
select * from employer where deleted = 0;
我们再分析一个场景:
比如商城搞促销活动,上架了一系列特价商品。此时活动结束了,我们如果就直接把这些特价商品给删除了,以后再有活动需要上架这一批商品难道我们还要去数据库重新添加这部分商品?显然这是十分不合理的操作,对于这个情况,我们也可以去使用逻辑删除,把商品逻辑删除(deleted设置为1),后续需要重新上架的时候,把deleted改回0就好了。
三、基于SpringBoot实现逻辑删除
3.1、为实体类新增逻辑删除属性
我们用@TableLogc注解就可以指定当前属性为逻辑删除的字段
value表示未删除
delaval表示删除
我们也可以在yml配置文件中指定删除与未删除的表示数
配置后,我们就可以把@TableLogic的形参去掉了
3.2、同步数据库新增列名delete
3.3、测试并观察执行的SQL语句
生成的SQL如下
此时就实现了我们所需要的逻辑删除效果