一 点睛
1 物理删除
真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据。
2 逻辑删除
假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。
3 逻辑删除的使用场景
可以进行数据恢复
有关联数据,不便删除
二 实现流程图解
三 实战
1 数据表结构
CREATE TABLE `user` (
`id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键ID',
`NAME` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`version` int(11) DEFAULT NULL,
`deleted` int(11) DEFAULT NULL, # 这一项是关键
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 数据表中的数据
mysql> select * from user;
+---------------------+--------------+------+--------------------+---------------------+---------------------+---------+---------+
| id | NAME | age | email | create_time | update_time | version | deleted |
+---------------------+--------------+------+--------------------+---------------------+---------------------+---------+---------+
| 0 | auto | 20 | 1243@qq.com | NULL | NULL | NULL | NULL |
| 2 | Jack | 20 | test2@baomidou.com | NULL | NULL | NULL | NULL |
| 3 | Tom | 28 | test3@baomidou.com | NULL | NULL | NULL | NULL |
| 1443158688033337346 | lucymaryupup | 20 | 1243@qq.com | NULL | 2021-09-30 08:51:12 | NULL | NULL |
| 1443378040145903617 | ASSIGN_ID | 20 | 1243@qq.com | 2021-09-30 08:51:56 | 2021-09-30 08:51:56 | NULL | NULL |
+---------------------+--------------+------+--------------------+---------------------+---------------------+---------+---------+
5 rows in set (0.00 sec)
3 实体类
@Data
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
pr