使用is_deleted字段的逻辑删除方案
- 联合唯一键:is_deleted + id
- id_deleted 定义
- 0 表示正常的数据状态
- 非 0 表示删除的数据状态
- 早期,当只允许 -1 时,逻辑删除只保留一个条目(即除了最新的删除外,其他的删除都物理删除,当然可以选择在当前表删除前先备份到其他表);
- 现在,为了保留所有逻辑删除过的历史条目(在当前表),is_deleted 的值可以为:-1, -2, -3, -4...依次递减,或者:-${id} 的格式,保证 is_deleted 字段在 id 固定时的唯一性
- update $table_name set is_deleted = min(is_deleted)-1 where id = $id
- update $table_name set is_deleted = id * (-1) where id = $id