Mysql 实现多种逻辑删除方案

Mysql 实现多种逻辑删除方案Mysql实现多种逻辑删除方案新增逻辑删除字段方式多deleted值deleted:0代表未删除,删除时把deleted赋值为时间戳UNIX_TIMESTAMP(NOW())采用备份表方式最近在做公司项目的时候,对于表的逻辑删除,和其他同事出现了不同意见,故查阅了一些blog,结合自己的实际情况,再次做了笔记,以备后查。在实际的项目开发中,对于某些业务数据,一般都不会采用物理删除的方式,…

大家好,又见面了,我是你们的朋友全栈君。

最近在做公司项目的时候,对于表的逻辑删除,和其他同事出现了不同意见,故查阅了一些blog,结合自己的实际情况,再次做了笔记,以备后查。
在实际的项目开发中,对于某些业务数据,一般都不会采用物理删除的方式,毕竟在数据是很宝贵了,所以也就有了逻辑删除的方式出现了。常见的逻辑删除方式有以下几种:1.为相关的表结构新增一个逻辑删除字段deleted 0表示未删除,1表示已删除(目前最常见的方式;2. 使用备份表的方式,将要删除的数据写入到备份表中,然后删除主表的数据。以下就对两种不同方式使用案例一一分析其中的优略之处。

新增逻辑删除字段方式

字段中设置一个字段deleted:0表示未删除,1表示已删除。
以下说明均以Artifact表做说明:此表中project_idname是artifact表中 Unique Key及 UK(project_id,name)。
如下图,artifact_02,已经被删除掉了,但是因为表结构设计了联合索引,因此这条记录也将无法再添加回来了,因此这种情况只能满足删除,但无法实现同一数据的再次新增。所以也就不太符合逻辑删除的需求场景了,那有没有改进的地方呢,答案当然是有了。

id project_id name create_user deleted
1 project001 artifact_01 xiaoma 0
2 project002 atifact_02 xiaoma 1
4 project003 phone xiaoma 0

多deleted值

  • 0 :表示为删除,其他值表示删除,如下表:
id project_id name create_user deleted
1 project003 phone xiaoma 0
2 project003 phone xiaoma 1
4 project003 phone xiaoma 2

这种方式可以保持Unique Key,但是在deleted冲突比较多,需要保证deleted累加
那有没有更加的方式呢,下面这个是对上面的改良版,

deleted: 0 代表未删除,删除时把deleted赋值为时间戳UNIX_TIMESTAMP(NOW())

其实就是把除零之外的值改为了删除是的时间戳,这样来的好处就是我可以记录当前删除数据的时间。也便于某些时候的记录查找和追溯。

id project_id name create_user deleted
1 project003 phone xiaoma 0
2 project003 phone xiaoma 1573631978
4 project003 phone xiaoma 1573631943

采用备份表方式

实现原理就是:每次删除的时候,都把数据写入到备份表,并且原始记录使用JSON格式完整保存,然后再删除。
还是以artifact表为例:这里要实现了逻辑删除,我将新建一张artifact_bankend表,用来存储要删除的数据。
artifact表数据如下表,我想删除掉id为2的记录,那我要做的事情就是,先把artifact表中id为2的这张表数据copy到artifact_bankend表中,再删除掉artifact表中数据。

id project_id name create_user
1 project001 artifact_01 xiaoma
2 project002 atifact_02 xiaoma
4 project003 phone xiaoma

artifact_bankend表:将artifact表中数据写入到artifact_bankend表。这里新增了一个deleted字段用来存储删除的时间。

id project_id name create_user deleted
2 project002 atifact_02 xiaoma 2019-11-14 15:14:45

删除之后的artifact表数据如下:

id project_id name create_user
1 project001 artifact_01 xiaoma
4 project003 phone xiaoma

优点: 原始表不会包含删除的数据,有利于查询效率
缺点:实现比较麻烦,每一张需要逻辑删除的表都需要备份表

https://cloud.tencent.com/developer/article/1531915

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137284.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Mutex对象使用时发现的问题

    Mutex对象使用时发现的问题Mutex对象等待互斥对象的方法有:Mutex.WaitAll、WaitOne、Mutex.WaitAny使用Mutex对象经常出现的异常现象有:异常一、 由于出现被放弃的mutex,等待过程结束原因:获取互斥对象后没有显式的释放对应的互斥对象就结束了对应的线程解决办法:每调用一个等待方法,在结束调用时都要调用ReleaseMutex()方法进行Mutex对象释放。而每种释

  • (2021 最新版)IntelliJ IDEA 下载安装及配置教程

    (2021 最新版)IntelliJ IDEA 下载安装及配置教程前言因为自己电脑最近实在是太卡了,也一直提示更新,索性就直接重装了个系统。因为需要重装下IDEA,而现在新版本的IDEA和之前的版本还是有很大变化的,所以在这里写一篇博客做个记录,方便自己后续配置,也顺便分享给大家。准备工作既然要安装IDEA,那么首先需要前往JetBrains的官网下载最新版的IDEA,下载地址如下:https://www.jetbrains.com/idea/download/这里最新的版本是2021.1.2,而因为我有旗舰版的账号,所以这里就以旗舰版安装

  • 特立独行的理解_特立独行的感觉

    特立独行的理解_特立独行的感觉原题链接对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数

  • tkMapper的andLike的使用「建议收藏」

    tkMapper的andLike的使用「建议收藏」查询条件:wheretype=’intf’and(codelike’%keyword%’ornamelike’%keyword%’)Exampleexample=newExample(SysPermissionEntity.class);example.createCriteria().andEqualTo(“type”,”intf”).andLike(“code”,”%”+keyword+”%”);List<SysPermissionEntity>per.

  • 汉诺塔问题java代码_汉诺塔java实现结果

    汉诺塔问题java代码_汉诺塔java实现结果Java基础语法(汉罗塔)1起源2需求3分析3.11个碟子3.22个碟子3.33个碟子3.44个碟子3.5规律4代码实现:直接算法5代码实现封装:栈的思想1起源汉罗塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。2需求将汉罗塔问题抽象到数学:

    2022年10月11日
  • 校验json格式的工具_校验码计算工具

    校验json格式的工具_校验码计算工具在线JSON格式化校验工具

    2022年10月28日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号