删除MySql行,或标记";死了;?

删除MySql行,或标记";死了;?,mysql,database,Mysql,Database,对于从某些类型的表中删除行,我总是有一种奇怪的感觉 例如,如果我有一个用户表…当他们删除他们的帐户,而不是完全删除他们的行时,我已经标记为“死”或不活动。这使我能够保留他们存在的记录,如果我再次需要的话 在这种情况下,考虑到性能、开销等,我应该删除该行,还是简单地将其标记为不活动 哪个更“常见”?也许您可以将非活动MySQL记录移动到一个单独的表中,该表设计用于保存非活动帐户?这样,如果需要,您可以简单地将它们移回原来的位置,或者在数据库大小出现问题时删除表。从数据库中永久删除数据非常有价值。将

对于从某些类型的表中删除行,我总是有一种奇怪的感觉

例如,如果我有一个用户表…当他们删除他们的帐户,而不是完全删除他们的行时,我已经标记为“死”或不活动。这使我能够保留他们存在的记录,如果我再次需要的话

在这种情况下,考虑到性能、开销等,我应该删除该行,还是简单地将其标记为不活动


哪个更“常见”?

也许您可以将非活动MySQL记录移动到一个单独的表中,该表设计用于保存非活动帐户?这样,如果需要,您可以简单地将它们移回原来的位置,或者在数据库大小出现问题时删除表。

从数据库中永久删除数据非常有价值。将标记为死

我通常会给出此类案例的状态。以这种模式

  • 0
    未激活
  • 1
    激活
  • 2
    垃圾

  • 就我个人而言,我几乎总是使用你描述的“软删除”

    如果空间是一个问题,我将有一项工作,在软删除记录被删除一定时间后定期清理这些记录。

    除了“软”删除之外,另一个解决方案是使用“审核表”。我最近在dba.stackexchange.com上问过

    审计表通常用于记录对第二个表执行的操作,如插入/更新/删除,可能存储新旧值、时间等

    它们可以使用触发器以简单的方式实现

    优点:

    • “未使用”数据在单独的表中
    • 将细节级别旋钮从细粒度转到粗粒度是很容易的
    • 它在空间上可能更有效,具体取决于具体的实现
    缺点:

    • 由于数据位于一个单独的表中,因此在一行被“取消删除”的情况下可能会导致键冲突
    • 它可能在空间方面效率较低,具体取决于具体的实现

      • 这个问题让我想起了这个有趣的问题。我的观点是:选择硬与软删除时,有很多因素需要考虑:没有拇指规则告诉你选择哪一个。

        我喜欢基于数字的方法。节省一些开销: