Open wolfogre opened 5 years ago
文章不错,如果能够给一些指导方针,讲一讲什么场景下推荐使用软删除/硬删除;使用软删除如何避免上述问题那就更好了。
确实列出了软删除的不少痛苦场景,尤其是对唯一索引的影响。这里有一种方案是将删除标识置为自增的多值,例如第一次删除为1,第二次为2。
nice
直接维护一个 deleted 字段类型和 primary key 一样默认为 0,让这个字段在 soft-delete 的时候,更新为 Primary Key 的值就 OK 了
看起来确实有问题,有什么解决办法吗?
写的很棒!
如果假设软删除的数据不会被再次更新,定期把modify_time很古老的已删除数据dump出去,然后从表里真的删掉应该也能解决问题吧
现在使用unix时间戳标记删除不需要改造gorm了 见Delete-Flag
MySQL 8 可以在唯一索引中使用表达式来解决与逻辑删除的冲突。
例如 user 表中要求未被删除的 username 字段唯一
alter table user add unique index uk_deleted_username ((if(deleted = 0, username, null)));
https://blog.wolfogre.com/posts/trap-of-soft-delete/