fox在数据库中表怎么逻辑删除

fox在数据库中表怎么逻辑删除,第1张

方案1:增加备份表(删除记录表)

每张表都设计一张对应的备份表,用于存储删除的数据。表结构可以根据实际需要在原表基础上增加删除时间、删除 *** 作者之类的字段。这样在删除数据时,对于原表,相当于是物理删除,然后再备份表中插入新的记录。注意:映射关系表也需要备份表。

优点:跟物理删除类似,不会有数据冲突的问题。同时也满足了逻辑删除的需求。将在用的业务数据与历史数据区分开,业务结构更清晰。

缺点:需要逻辑删除的数据都要有对应备份表。

区别:物理删除是真正的删除,再也找不到这个文件了。

逻辑删除并没有真正的删除掉,可以重新恢复。

物理删除:真实删除。将对应数据从数据库中删除,之后查询不到此条被删除数据;

逻辑删除:假删除。将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

拓展资料:

在计算机中资料数据等都以文件形式存储,删除文件分为两种情况。分为逻辑删除和物理删除。

逻辑删除是指文件没有被真正的删除,只不过是文件名的第一个字节被改成 *** 作系统无法识别的字符。通常这种删除 *** 作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。

物理删除是指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的。

参考资料:逻辑删除与物理删除百度百科

需要考虑:

目前来看,因为会逻辑删除,所以shop_id + is_delete不能加唯一索引被删除的会重复。

加上delete_time字段。

建shop_id + file_url + is_delete + delete_time唯一索引。

删除行,同时赋值delete_time。这样删除行就不会冲突了。

新增行,is_delete和delete_time都是0。唯一索引也能保证只会有一条数据。

redis分布式锁有天然的问题。不做考虑(可以参考我的另一片文章 分布式锁 )。

所以,就使用mysql锁。

锁粒度可以为店铺粒度。唯一索引为shopId。

每次更新数据前,先锁shopId这个实体。再执行insert 或 update。

锁粒度也可以为店铺+文件粒度。唯一索引为shop_id+file_url。

每次更新数据前,先锁shop_id + file_url这个实体。再执行insert 或 update。

当被删除的数据,再次被添加时,不做插入 *** 作,直接更新原记录到正常状态。此时原表可以加唯一索引。

这个时候 *** 作历史就丢了,怎么办呢。新加一张表,专门用来记录变更流水。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10812602.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存