一、概述
逻辑删除就是基于代码逻辑模拟删除效果,但是并不会真正删除数据。
- 在表中增加一个字段标记数据是否被删除
- 当删除数据时,把标记设置为1
- 查询时只查询标记为0的数据
二、基本使用
配置了逻辑删除,只要表中有逻辑删除的字段,以后所有的删除操作都会变成逻辑删除【修改】
逻辑删除本身也有自己的问题:
- 会导致数据库表垃圾数据越来越多,影响查询效率。
- SQL中全部都需要对逻辑删除字段做判断,影响查询效率。
因此,不太推荐采用逻辑删除的功能,如果数据不能删除,可以采用把数据迁移到其他表的办法。
三、测试
@Test
void testFlag() {
userService.removeById(1);
List<User> users = userService.list();
users.forEach(user -> {
System.out.println(user);
});
}
当执行删除操作时,如果数据库表中有flag字段,则会执行修改操作:
UPDATE user SET flag=1 WHERE id=? AND flag=0
,
当再次执行查询操作时,会自动查询未被逻辑删除的字段:
SELECT id,username,password,phone,info,status,balance,dept_id,flag,create_time,update_time FROM user WHERE flag=0