逻辑删除如何保证数据库记录唯一

逻辑删除如何保证数据库记录唯一,第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。

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

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

这种索引叫做唯一索引。它保证数据库表中的每一行都有一个唯一的索引值。这个索引可以是自动生成的(比如一个自增的整数),也可以是用户提供的(比如用户名或者身份z号码)。唯一索引可以帮助数据库快速找到特定的行,并且可以保证数据的完整性。


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

原文地址: http://outofmemory.cn/sjk/6828118.html

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

发表评论

登录后才能评论

评论列表(0条)

保存